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
- Android开发--IM聊天项目(二)
- Android开发--IM聊天项目(一)
- Android开发--IM聊天项目(三)
- Android开发--IM聊天项目(四)--IPC实战
- Android开发--IM聊天项目(五)--进程保活踩坑
- #征文再续#Android基于XMPP Smack Openfire开发IM即时聊天(二)
- Android基于环信SDK开发IM即时聊天(二)
- IM项目进程(二)
- android的开源电话/通讯/IM聊天项目全集
- Android 的开源电话/通讯/IM聊天项目全集
- Android 的开源电话/通讯/IM聊天项目全集
- Android 的开源电话/通讯/IM聊天项目全集
- Android 的开源电话/通讯/IM聊天项目全集
- Android基于环信SDK开发IM即时聊天(一)
- Android基于环信SDK开发IM即时聊天
- Android-IM从零开始开发一个即时通讯项目
- android 【IM】 聊天布局问题
- 移动应用(手机应用)开发IM聊天程序解决方案
- (转)pandorabox固件+PPPOE拨号+IPV6
- Java内存分析
- HDU - 1028 - Ignatius and the Princess III
- mybatis学习笔记-实例程序结构
- JAVA爬虫挖取CSDN博客文章
- Android开发--IM聊天项目(二)
- MongoDB 定时备份
- SpringMVC之控制器controller
- 西电军校读后感
- Android学习路线指南
- js判断输入字符串长度(汉字算两个字符,字母数字算一个)
- C#图解教程学习笔记_第三章类型、存储、变量
- 读书笔记:软件设计师教程:操作系统
- 23种设计模式(1)