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