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

继续做之前的项目:
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上运行闪退。待解决。

你可能感兴趣的:(Android项目实战)