即时聊天APP(二) - MainActivity
主活动包含三个Fragment,分别是会话、联系人和设置,初始布局隐藏所有碎片,然后把应该显示的显示出来:
//隐藏所有Fragment
private void hideAll(){
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.hide(first)
.hide(second)
.hide(third)
.commit();
}
//初始化布局
private void init() {
textView = findViewById(R.id.common_actionbar);
textView.setOnClickListener(this);
textView.setText("会话");
}
//初始化Fragment
private void initFragment() {
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
first = new Conversationlist();
second = new Friends();
third = new My();
ft.add(R.id.fragment,first);
ft.add(R.id.fragment,second);
ft.add(R.id.fragment,third);
hideAll();
//判断当前显示界面
if(Tips.current == 0 || Tips.current == 1){
ft.show(first);
textView.setText("会话");
}else if(Tips.current == 2){
ft.show(second);
textView.setText("联系人");
}else {
ft.show(third);
textView.setText("设置");
}
ft.commit();
}
接下来连接服务器,这里我放置了一个线程,每隔1秒检查检查一次是否连接成功:
//连接服务器
private void connect() {
//检查网络连接
if(!NetWork.isNetConnection(this)){
Toast.makeText(this,"无网络连接!",Toast.LENGTH_SHORT).show();
isConnect = false;
}else{
//每秒检查是否连接
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if(!isConnected())
isConnect = false;
else
isConnect = true;
}
}, 300,1000);
try {
if (!isConnect) {
if (Tips.MainActivity_fail == 0) {
Toast.makeText(MainActivity.this, "服务器连接失败!正在重试...", Toast.LENGTH_SHORT).show();
Tips.MainActivity_fail = 1;
Tips.MainActivity_success = 0;
}
BmobIM.connect(MyUser.getUni(), new ConnectListener() {
@Override
public void done(String s, BmobException e) {
if (e == null) {
isConnect = true;
retry = 0;
if (Tips.MainActivity_success == 0) {
Toast.makeText(MainActivity.this, "服务器连接成功!", Toast.LENGTH_SHORT).show();
Tips.MainActivity_success = 1;
Tips.MainActivity_fail = 0;
}
}else {
if (retry == 0)
if (Tips.MainActivity_fail == 0) {
Toast.makeText(MainActivity.this, "服务器连接失败!正在重试...", Toast.LENGTH_SHORT).show();
Tips.MainActivity_fail = 1;
Tips.MainActivity_success = 0;
} else
retry++;
connect();
}
}
});
}
}catch (Exception e){}
}
}
这里是判断是否连接的代码:
//判断是否连接
private boolean isConnected(){
boolean IsCon = false;
try {
String mg = BmobIM.getInstance().getCurrentStatus().getMsg();
if(mg.equals("connected"))
IsCon = true;
}catch (Exception e){
IsCon = false;
}
return IsCon;
}
这里是发送自定义广播的代码,使用EventBus来触发事件:
//发送广播
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(cn.edu.sau.joker.MessageEvent event) {
Intent intent = new Intent("cn.edu.sau.action.MESSAGE");
intent.putExtra("msg",event.message);
sendBroadcast(intent);
}
下面是退出代码,上面的部分是用户在点击退出的时候会finish掉此Activity,下面时用户点击两次返回键finish当前活动退出:
//销毁活动
@Override
protected void onNewIntent(Intent intent){
super.onNewIntent(intent);
if (intent != null) {
boolean isExit = intent.getBooleanExtra(TAG_EXIT, false);
if (isExit) {
this.finish();
}
}
}
//连续按两次返回键就退出
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
if (firstTime + 2000 > System.currentTimeMillis()) {
super.onBackPressed();
} else {
Toast.makeText(this,"再按一次退出程序",Toast.LENGTH_SHORT).show();
// Toa("再按一次退出程序");
}
firstTime = System.currentTimeMillis();
}
另外,在使用EventBus时要进行注册和注销:
//注册订阅者
EventBus.getDefault().register(this);
// 注销订阅者
EventBus.getDefault().unregister(this);
即时聊天APP(二) - MainActivity的更多相关文章
- 即时聊天APP(一)
最新写了一个即时聊天的安卓Demo,是基于Bmob后端开发的app,由于Bmob有较大局限性,因此,我并没有按照开发文档来进行开发,只是简单写了一个基本的文字聊天,以后有时间我会自己写一个带服务端的即 ...
- 即时聊天APP(五) - 聊天界面
设置界面没什么好说的,无非也就是加了个对话框来二次提醒用户,现在来讲讲聊天界面. 聊天界面初始化时会得到一个参数,就是对方的id,并设置在标题栏的位置,此界面也是使用RecyclerView来展示聊天 ...
- 即时聊天APP(六) - 消息的接收以及EventBus使用
通常我们在接收消息的时候会有声音和震动的提示,因此我也加了代码达到这样的效果,这就要用到EventBus了,当然这里我也用到了自定义的广播,所以首先在Mainfests文件中加入以下代码: <r ...
- 即时聊天APP(三) - 注册和登陆
注册和登陆大多都是一些用户名和密码的验证,所以放在一起写,注册代码: String account = accountEdit.getText().toString().trim(); String ...
- 即时聊天APP(四) - 联系人和会话
联系人和会话界面使用的是RecyclerView进行滑动显示,并将好友列表存储至数据库,以供下次登录时使用,RecyclerView在后面我会详细介绍,这里略过. 联系人初始化时读取数据库并展示: / ...
- 即时聊天IM之二 openfire 整合现有系统用户
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 综述: ...
- 高仿QQ即时聊天软件开发系列之二登录窗口界面
继上一篇高仿QQ即时聊天软件开发系列之一开端之后,开始做登录窗口 废话不多说,先看效果,只有界面 可能还有一些细节地方没有做,例如那个LOGO嘛,不要在意这些细节 GIF虽短,可是这做起来真难,好吧因 ...
- web 直播&即时聊天------阿里云、融云(二)
上一篇简要主要介绍了融云制作聊天室的基本方法,这次基本属于对上一篇的补充以及进阶...^_^... (ps:吐槽一下,加了三个融云的线下qq群,全部没人解决问题,也不知道建此群的意义,若是民间的话就当 ...
- Node.js + Web Socket 打造即时聊天程序嗨聊
前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...
随机推荐
- centos7通过yum安装docker
##yum源安装#1.更新yumyum update #2.删除旧版本yum remove docker \docker-client \docker-client-latest \docker-co ...
- .NET World——gPRC概览
什么是gRPC 官方的定义: gRPC is a modern open source high performance RPC framework that can run in any envir ...
- 防抖(debounce)和节流(throttle)
场景说明:一般我们在前端页面中会给元素绑定click.scroll.onmousemove.resize等事件,这些事件的执行函数如果是去发请求获取数据的话,我们无意识的连续点击或者连续滚动会给服务器 ...
- 既然synchronized是"万能"的,为什么还需要volatile呢?
在我的博客和公众号中,发表过很多篇关于并发编程的文章,之前的文章中我们介绍过了两个在Java并发编程中比较重要的两个关键字:synchronized和volatile 我们简单回顾一下相关内容: 1. ...
- 自由变形技术(Free-Form Deformation)
自由变形技术Free-Form Deformation是编辑几何模型的重要手段,它于80年代由Sederberg等人提出,目前许多三维建模软件中都有这种变形算法.自由变形方法在变形过程中并不是直接操作 ...
- PythonI/O进阶学习笔记_3.2面向对象编程_python的继承(多继承/super/MRO/抽象基类/mixin模式)
前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第二篇 继承. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...
- Zabbix安装时出现缺少PHP模块,解决过程
我在安装时PHP缺少gettext模块和bcmath模块:一下为解决步骤: 1.进入到PHP源码包目录下的ext目录: #cd /soft/php-/ext 2.会看到ext目录下有gettext目录 ...
- Leetcode之二分法专题-154. 寻找旋转排序数组中的最小值 II(Find Minimum in Rotated Sorted Array II)
Leetcode之二分法专题-154. 寻找旋转排序数组中的最小值 II(Find Minimum in Rotated Sorted Array II) 假设按照升序排序的数组在预先未知的某个点上进 ...
- PHP 递归读取无限级分类
/** * [获取第一级分类] * 20170829 * * @return array */ public function getCateList(){ $this->catelog = [ ...
- .Net Core 2.2与Java 12性能对比
我发现基准游戏(https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/csharp.html)是一套非常好的基准测试. ...