• 即时聊天APP(二)


    主活动包含三个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);
  • 相关阅读:
    CentOS 7 和centos6切换图形界面和多用户界面
    centos6.8下安装elasticsearch
    一个xib钟多个Cell
    iOS frame从导航栏下面开始
    Xcode 移除(卸载)插件
    iOS9 HTTP传输安全
    pch头文件
    真机调试---打包6plus出现问题
    Xcode 添加类前缀
    iOS 状态栏黑色背景白色字体
  • 原文地址:https://www.cnblogs.com/zqm-sau/p/10331916.html
Copyright © 2020-2023  润新知