Android开发--IM聊天项目(二)

来源:互联网 发布:商家网络交易严重违法 编辑:程序博客网 时间:2024/04/28 01:16

继续做之前的项目:
1.今天实现的是android端的聊天记录持久化。
用的是SQLite,非常的简单。但是也出了一点幺蛾子。

package com.sp.chattingroom.Adapter;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;import com.sp.chattingroom.Model.Msg;/** * Created by Administrator on 2017/2/12. */public class DBHelper extends SQLiteOpenHelper {    private static final String TAG = "DBHelper";    private final static String DB_Name="Chatlog.db";    private final static int DB_Version=1;    private final static String TABLE_Name="my";    private final static String ID="id";    private SQLiteDatabase sqLiteDatabase=getWritableDatabase();    public DBHelper(Context context){        super(context,DB_Name,null,DB_Version);        Log.e(TAG, "DBHelper: ");    }    @Override    public void onCreate(SQLiteDatabase database){        Log.e(TAG, "onCreate: ");        database.execSQL("create table "+TABLE_Name+"(id INTEGER PRIMARY KEY AUTOINCREMENT,content TEXT,type INTEGER)");    }    @Override    public void onUpgrade(SQLiteDatabase database,int oldversion,int newversion){    }    public long insert(Msg msg){        Log.e(TAG, "insert: "+msg.getContent() );        ContentValues contentValues=new ContentValues();        contentValues.put("content",msg.getContent());        contentValues.put("type",msg.getType());        long row=sqLiteDatabase.insert(TABLE_Name,null,contentValues);        return row;    }    public Cursor select(){        Cursor cursor=sqLiteDatabase.query(TABLE_Name,null,null,null,null,null,null);        return cursor;    }}

这就是帮助类的代码了,非常的简短,但是使用的时候缺发现,保存的聊天记录都是重复最后一条记录。一番考证之后最后发现了问题的所在:关于ArrayList.add(),当添加的时候添加的并不是实体类,而是实体类的引用,相当于指针,存储的是也是存储的指针。所以我添加的都是对象的引用,而这个引用并没有变化,所以最后ArrayList中的数据均指向最后一次封装的对象。
所以当往ArrayList中添加数据的时候需要重新new对象
2.增加通知功能

private void SendNotification(String content){        Log.e(TAG, "SendNotification: "+content );        /*这里要注意一个细节。         *如果当前Activity存在的话,不应该再create一个新的活动,应该是回到当前活动。         * 所以要给Intent添加对应的flag         */        Intent i=new Intent(Intent.ACTION_MAIN);        i.addCategory(Intent.CATEGORY_LAUNCHER);        i.setComponent(new ComponentName(this,ChatActivity.class));        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);        PendingIntent p=PendingIntent.getActivity(this,0,i,0);        Notification notification=new Notification.Builder(this)                .setAutoCancel(true)                .setContentText(content)                .setContentTitle("新消息")                .setTicker("Ticker")                .setWhen(System.currentTimeMillis())                .setSmallIcon(R.mipmap.ic_launcher)                .setDefaults(Notification.DEFAULT_SOUND)                .setContentIntent(p)                .build();        notificationManager.notify(0,notification);    }

问题记录:发现在小米5上运行闪退。待解决。

1 0