android简单的多人聊天程序--借助Bmob后台数据库

有接触过Bmob的同学可以参考下~

思路:程序每隔5s向服务器请求刷新一次数据将刷新结果显示在TextView上。


布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:layout_marginTop="5dip"
        android:layout_weight="1" >

        <TextView
            android:id="@+id/showtxt"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="对话:"
            android:textSize="16sp" />
    </ScrollView>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:background="#23222222"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/edit"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_weight="1" />

        <Button
            android:id="@+id/buutton"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:text="send" />
    </LinearLayout>

</LinearLayout>

Bmob后台数据库表格类:

package com.example.heihei;

import cn.bmob.v3.BmobObject;

public class IMessage extends BmobObject{
	
	private String msg;
	
	public void setMsg(String msg) {
		this.msg = msg;
	}
	
	public String getMsg() {
		return msg;
	}
	
}

主类:

package com.example.heihei;

import cn.bmob.v3.Bmob;
import cn.bmob.v3.a.a.thing;
import cn.bmob.v3.listener.SaveListener;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

	static TextView showTxt;
	EditText editText;
	Button button;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	
		/**
		 * Bmob后端服务初始化
		 */
		Bmob.initialize(this, "这里写自己的应用密匙");
		
		//初始化控件
		showTxt=(TextView) findViewById(R.id.showtxt);
		editText=(EditText) findViewById(R.id.edit);
		button=(Button) findViewById(R.id.buutton);
		
		//打开一个线程实时刷新消息
		final FlusMessage flusMessage=new FlusMessage(this);
		flusMessage.start();
	
		button.setOnClickListener(new OnClickListener() {//点击发送消息
			
			@Override
			public void onClick(View v) {
				if (!editText.getText().toString().equals("")) {
					IMessage iMessage=new IMessage();//Bmob数据库表格类
					iMessage.setMsg(editText.getText().toString());
					iMessage.save(MainActivity.this, new SaveListener() {					
						@Override
						public void onSuccess() {
							System.out.println("保存成功");
							showTxt.setText(flusMessage.msg2+editText.getText().toString());
							editText.setText("");
						}	
						@Override
						public void onFailure(int arg0, String arg1) {						
						}
					});
				}
				
				
			}
		});

	}
}

子线程:

package com.example.heihei;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.widget.Toast;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.listener.FindCallback;

public class FlusMessage extends Thread {

	Context context;
	int oldLen=0;
	String msg="",msg2="";
	public FlusMessage(Context context) {
		this.context = context;
	}

	@Override
	public void run() {
		
		BmobQuery query = new BmobQuery("IMessage");
		while (true) {
			
			query.findObjects(context, new FindCallback() {		
				@Override
				public void onFailure(int arg0, String arg1) {
					Toast.makeText(context, "查询数据库失败", 1).show();
				}

				@Override
				public void onSuccess(JSONArray arg0) {
					try {
						
						if (arg0.length()!= 0) {//如果服务器数据库有数据
							
							if (oldLen!=arg0.length()) {//如果服务器数据库的数据数跟上一次查询结果不相同
								
								oldLen=arg0.length();
								
								for (int i = 0; i < arg0.length(); i++) {
									
									JSONObject jsonObject = arg0.getJSONObject(i);									
									msg=msg+jsonObject.getString("msg")+"\n";//用一个String字符串储存消息
									
								}
								MainActivity.showTxt.setText(msg);//设置主UI界面TextView
								msg2=msg;//备份消息
								msg="";
							}else {
								MainActivity.showTxt.setText(msg2);//当查询消息条目一样,主UI界面TextView设置备份消息
							}
							
						}
						
						
					} catch (JSONException e) {
						e.printStackTrace();
					}
				}
			});
			
			try {
				Thread.sleep(5000);//每隔5s刷新一次数据
			} catch (InterruptedException e1) {
				e1.printStackTrace();
			}
			
		}

	}

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值