主活动包含三个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的更多相关文章

  1. 即时聊天APP(一)

    最新写了一个即时聊天的安卓Demo,是基于Bmob后端开发的app,由于Bmob有较大局限性,因此,我并没有按照开发文档来进行开发,只是简单写了一个基本的文字聊天,以后有时间我会自己写一个带服务端的即 ...

  2. 即时聊天APP(五) - 聊天界面

    设置界面没什么好说的,无非也就是加了个对话框来二次提醒用户,现在来讲讲聊天界面. 聊天界面初始化时会得到一个参数,就是对方的id,并设置在标题栏的位置,此界面也是使用RecyclerView来展示聊天 ...

  3. 即时聊天APP(六) - 消息的接收以及EventBus使用

    通常我们在接收消息的时候会有声音和震动的提示,因此我也加了代码达到这样的效果,这就要用到EventBus了,当然这里我也用到了自定义的广播,所以首先在Mainfests文件中加入以下代码: <r ...

  4. 即时聊天APP(三) - 注册和登陆

    注册和登陆大多都是一些用户名和密码的验证,所以放在一起写,注册代码: String account = accountEdit.getText().toString().trim(); String ...

  5. 即时聊天APP(四) - 联系人和会话

    联系人和会话界面使用的是RecyclerView进行滑动显示,并将好友列表存储至数据库,以供下次登录时使用,RecyclerView在后面我会详细介绍,这里略过. 联系人初始化时读取数据库并展示: / ...

  6. 即时聊天IM之二 openfire 整合现有系统用户

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:egojit@qq.com  综述: ...

  7. 高仿QQ即时聊天软件开发系列之二登录窗口界面

    继上一篇高仿QQ即时聊天软件开发系列之一开端之后,开始做登录窗口 废话不多说,先看效果,只有界面 可能还有一些细节地方没有做,例如那个LOGO嘛,不要在意这些细节 GIF虽短,可是这做起来真难,好吧因 ...

  8. web 直播&即时聊天------阿里云、融云(二)

    上一篇简要主要介绍了融云制作聊天室的基本方法,这次基本属于对上一篇的补充以及进阶...^_^... (ps:吐槽一下,加了三个融云的线下qq群,全部没人解决问题,也不知道建此群的意义,若是民间的话就当 ...

  9. Node.js + Web Socket 打造即时聊天程序嗨聊

    前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...

随机推荐

  1. Java集合框架之TreeSet浅析

    Java集合框架之TreeSet浅析 一.TreeSet综述: 1.1TreeSet简介: TreeSet是Java集合框架的重要成员,先来看看TreeSet在jdk1.8中的定义吧: public ...

  2. [SQL] 外卖系统数据库设计

    注意: 1.项目需求:小程序外卖系统,以美团,饿了么为参考. 2.表设计没有外键约束,设计是在程序中进行外键约束. 3.希望通过分享该数据库设计,获取大家的建议和讨论. SQL: CREATE DAT ...

  3. API 资源隔离系统设计与实现

    (马蜂窝技术原创内容,公众号 ID:mfwtech) Part 1 背景 大交通业务需要对接机票.火车票.租车.接送机等业务的外部供应链,供应商的数据接口大部分通过 HTTP.HTTPS 等协议进行通 ...

  4. Java NIO系列之[说在前面的话]

    在开始这个系列文章之前,先聊一些题外话,说说我为什么要写Java NIO这个系列技术文章(不看完会错失一个亿的),因为Java NIO并不像JVM,中间件源码那么有吸引力,但这个技术点是java的基础 ...

  5. 用故事解析setTimeout和setInterval(内含js单线程和任务队列)

    区别: setTimeout(fn,t): 延迟调用,超过了时间就调用回调函数,返回一个id,使用clearTimeout(id)取消执行. 注意:取消了里面的回调函数就不执行了哦,而不是取消的时候就 ...

  6. netty源码解解析(4.0)-20 ChannelHandler: 自己实现一个自定义协议的服务器和客户端

    本章不会直接分析Netty源码,而是通过使用Netty的能力实现一个自定义协议的服务器和客户端.通过这样的实践,可以更深刻地理解Netty的相关代码,同时可以了解,在设计实现自定义协议的过程中需要解决 ...

  7. 模板列传值到子窗体中,子窗体中多选gridview中checkbox保存数据多项到数据库中

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  8. 重识 ArrayList

    前言 ArrayList 作为 Java 集合框架中最常用的类,在一般情况下,用它存储集合数据最适合不过.知其然知其所以然,为了能更好地认识和使用 ArrayList,本文将从下面几方面深入理解 Ar ...

  9. 以股票RSI指标为例,学习Python发送邮件功能(含RSI指标确定卖点策略)

    本人之前写过若干“给程序员加财商”的系列文,目的是通过股票案例讲述Python知识点,让大家在学习Python的同时还能掌握相关的股票知识,所谓一举两得. 在之前的系列文里,大家能看到K线,均线,成交 ...

  10. python暴力算法快乐数

    编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 ...