即时聊天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这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...
随机推荐
- (二十四)c#Winform自定义控件-单标题窗体
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- 源码分析--dubbo服务端暴露
服务暴露的入口方法是 ServiceBean 的 onApplicationEvent.onApplicationEvent 是一个事件响应方法,该方法会在收到 Spring 上下文刷新事件后执行服务 ...
- java表达式
JAVA表达式优先级: (如果表达式复杂可直接括号处理) 资源来自尚学堂java视频
- MySQL多表关联数据同时删除
MySQL多表关联时的多表删除: DELETE t1, t2FROM t1LEFT JOIN t2 ON t1.id = t2.idWHERE t1.id = 25
- 【转】[Python小记] 通俗的理解闭包 闭包能帮我们做什么?
https://blog.csdn.net/sc_lilei/article/details/80464645
- Leetcode之二分法专题-278. 第一个错误的版本(First Bad Version)
Leetcode之二分法专题-278. 第一个错误的版本(First Bad Version) 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版 ...
- 再谈C#装箱和拆箱操作
1. 使用非泛型集合时引发的装箱和拆箱操作 看下面的一段代码: 1 2 3 4 5 6 7 8 var array = new ArrayList(); array.Add(1); array.Add ...
- effective java 3th item2:考虑 builder 模式,当构造器参数过多的时候
yiaz 读书笔记,翻译于 effective java 3th 英文版,可能有些地方有错误.欢迎指正. 静态工厂方法和构造器都有一个限制:当有许多参数的时候,它们不能很好的扩展. 比如试想下如下场景 ...
- HDU - 4366 Successor DFS区间+线段树
Successor:http://acm.hdu.edu.cn/showproblem.php?pid=4366 参考:https://blog.csdn.net/colin_27/article/d ...
- codeforces 842 D. Vitya and Strange Lesson(01字典树+思维+贪心)
题目链接:http://codeforces.com/contest/842/problem/D 题解:像这种求一段异或什么的都可以考虑用字典树而且mex显然可以利用贪心+01字典树,和线段树差不多就 ...