我的编程空间,编程开发者的网络收藏夹
学习永远不晚

适用于Android开发的简单聊天软件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

适用于Android开发的简单聊天软件

适用于android 开发。是一个简单的聊天软件,包括知识点,各个控件的运用(ExpandableListView,ViewPager,Spinner,LinearLayout,RelativeLayot),自定义的ViaImageView(自定义xml属性),sql 的写入,读取等操作。

1. ViaImageView.java   


package com.farina.farinaimagelib;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.graphics.Xfermode;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.NinePatchDrawable;
import android.util.AttributeSet;
import android.widget.ImageView;

public class ViaImageView extends ImageView {
 private int shapeType=-1;
 private int borderWidth=0; //the image 's border width
 private int borderColor= Color.BLACK; //the image 's border color
 private boolean useDefaultStyle =false; //draw a common imageview
 private static final Xfermode MASK_XFERMODE;
 private int AnimType=-1; //动画类型
 private int mWidth; //图片的宽度
 private int mHeight; //图片的高度
 static {
 PorterDuff.Mode localMode = PorterDuff.Mode.DST_IN;
 MASK_XFERMODE = new PorterDuffXfermode(localMode);
 }
 public static enum Shape {circle,triangle,star,hexagonal,rectangle};
 public ViaImageView(Context context){
 super(context);
 init(context, null, 0);
 }
 public ViaImageView(Context context, AttributeSet attrs){
 super(context, attrs);
 init(context, attrs, 0);
 }
 public ViaImageView(Context context,AttributeSet attrs,int defStyle){
 super(context, attrs, defStyle);
 init(context, attrs, defStyle);
 }
 public void init(Context context,AttributeSet attrs,int defStyle){
 if(attrs!=null){
  TypedArray a = getContext().obtainStyledAttributes(
   attrs,R.styleable.viaImage, defStyle, 0);
  shapeType = (int)a.getInteger(R.styleable.viaImage_shapeType,shapeType);
  borderWidth=(int)a.getDimension(R.styleable.viaImage_borderWidth,borderWidth);
  borderColor = a.getColor(R.styleable.viaImage_borderColor, borderColor);
  a.recycle();
 }
 }
 
 public void setImageViewProperty(int shapeType,int width,int color){
 this.shapeType = shapeType;
 this.borderWidth = width;
 this.borderColor = color;
 postInvalidate();
 }
 public void setImageViewShape(int shapeType){
 this.shapeType = shapeType;
 postInvalidate();
 }
 public void setImageBorderWidth(int width){
 this.borderWidth = width;
 postInvalidate();
 }
 public void setImageBorderColor(int color){
 this.borderColor = color;
 postInvalidate();
 }
 
 public void setDrawCommonImage(boolean isCommon){
 this.useDefaultStyle=isCommon;
 }
 @Override
 protected void onDraw(Canvas canvas){
 if(useDefaultStyle){
  super.onDraw(canvas);
  return;
 }
 final Drawable localDrawable=getDrawable();
 if(localDrawable==null)return;
 if(localDrawable instanceof NinePatchDrawable)return;
 mWidth=getWidth();
 mHeight=getHeight();
 int layer=canvas.saveLayer(0.0f,0.0f,mWidth,mHeight,null,Canvas.ALL_SAVE_FLAG);
 localDrawable.setBounds(0,0,mWidth,mHeight);
 
 localDrawable.draw(canvas);
 createShapeBitmap(canvas);
 
 canvas.restoreToCount(layer);
 if(borderWidth!=0){
  drawBorder(canvas);
 }
 }
 private void createShapeBitmap(Canvas canvas){
 Paint mypaint;
 mypaint = new Paint();
 mypaint.setFilterBitmap(false);
 mypaint.setAntiAlias(true);
 mypaint.setXfermode(MASK_XFERMODE);
  Bitmap.Config localConfig=Bitmap.Config.ARGB_8888;
  Bitmap localBitmap=Bitmap.createBitmap(mWidth,mHeight,localConfig);
  Canvas localCanvas=new Canvas(localBitmap);
  Paint localPaint = new Paint();
  localPaint.setAntiAlias(true);
  int padding=borderWidth;
  int radius = ((mWidth>mHeight)?mHeight:mWidth)/2-padding;
  switch(shapeType){
  case 0://圆形;
  {
   localCanvas.drawCircle(mWidth/2,mHeight/2, radius, localPaint);
   break;
  }
  case 1://三角形;
  {
   Path path = new Path();
   path.moveTo(padding, padding);
   path.lineTo(mWidth / 2, (float)(mWidth*Math.cos(degree2Radian(30))-padding));
   path.lineTo(mWidth-padding, padding);
   path.close();
   localCanvas.drawPath(path, localPaint);
   break;
  }
  case 2://五角星形;
  {
   Path path = new Path();
   float radian = degree2Radian(36);// 36为五角星的角度
   float radius_in = (float) (radius * Math.sin(radian / 2) / Math
    .cos(radian)); // 中间五边形的半径
   path.moveTo((float) (radius * Math.cos(radian / 2)), 0);// 此点为多边形的起点
   path.lineTo((float) (radius * Math.cos(radian / 2) + radius_in
     * Math.sin(radian)),
    (float) (radius - radius * Math.sin(radian / 2)));
   path.lineTo((float) (radius * Math.cos(radian / 2) * 2),
    (float) (radius - radius * Math.sin(radian / 2)));
   path.lineTo((float) (radius * Math.cos(radian / 2) + radius_in
     * Math.cos(radian / 2)),
    (float) (radius + radius_in * Math.sin(radian / 2)));
   path.lineTo(
    (float) (radius * Math.cos(radian / 2) + radius
     * Math.sin(radian)), (float) (radius + radius
     * Math.cos(radian)));
   path.lineTo((float) (radius * Math.cos(radian / 2)),
    (float) (radius + radius_in));
   path.lineTo(
    (float) (radius * Math.cos(radian / 2) - radius
     * Math.sin(radian)), (float) (radius + radius
     * Math.cos(radian)));
   path.lineTo((float) (radius * Math.cos(radian / 2) - radius_in
     * Math.cos(radian / 2)),
    (float) (radius + radius_in * Math.sin(radian / 2)));
   path.lineTo(0, (float) (radius - radius * Math.sin(radian / 2)));
   path.lineTo((float) (radius * Math.cos(radian / 2) - radius_in
     * Math.sin(radian)),
    (float) (radius - radius * Math.sin(radian / 2)));
   path.close();// 使这些点构成封闭的多边形
   localCanvas.drawPath(path, localPaint);
   break;
  }
  case 3://正六边形;
  {
   Path path= new Path();
   float radian = degree2Radian(30);
   path.moveTo((float)(radius*Math.sin(radian)), 0);
   path.lineTo((float)(radius*Math.sin(radian)+radius), 0);
   path.lineTo((float)(2*radius), (float)(radius*Math.cos(radian)) );
   path.lineTo((float)(radius*Math.sin(radian)+radius),(float)(2*(radius*Math.cos(radian))));
   path.lineTo((float)(radius*Math.sin(radian)),(float)(2*(radius*Math.cos(radian))));
   path.lineTo(0,(float)(radius*Math.cos(radian)));
   path.close();
   localCanvas.drawPath(path,localPaint);
   break;
  }
  default://方形
  {
   int realWidth = (mWidth>mHeight)?mHeight:mWidth;
   int x = padding +(mWidth-realWidth)/2;
   int y = padding +(mHeight-realWidth)/2;
   RectF localRectF=new RectF(x, y, realWidth-padding*2, realWidth-padding*2);
   localCanvas.drawRect(localRectF, localPaint);
   break;
  }
  }
 
 canvas.drawBitmap(localBitmap,0.0f,0.0f,mypaint);
 }
 //画边框
 private void drawBorder(Canvas canvas){
 Paint localPaint = new Paint();
 localPaint.setColor(borderColor);
 localPaint.setStyle(Paint.Style.STROKE);
 localPaint.setStrokeWidth(borderWidth);
 localPaint.setAntiAlias(true);
 int radius=((mWidth>mHeight)?mHeight:mWidth)/2-borderWidth/2;
 int padding = borderWidth/2;
 switch(shapeType){
  case 0://圆形;
  {
  canvas.drawCircle(mWidth/2, mHeight/2,radius,localPaint);
  break;
  }
  case 1://三角形;
  {
  Path path = new Path();
  path.moveTo(padding, padding);
  path.lineTo(mWidth / 2, (float)(mWidth*Math.cos(degree2Radian(30))-padding));
  path.lineTo(mWidth-padding, padding);
  path.close();
  canvas.drawPath(path, localPaint);
  break;
  }
  case 2://五角星形;
  {
  Path path = new Path();
  float radian = degree2Radian(36);// 36为五角星的角度
  float radius_in = (float) (radius * Math.sin(radian / 2) / Math
   .cos(radian)); // 中间五边形的半径
  path.moveTo((float) (radius * Math.cos(radian / 2)), 0);// 此点为多边形的起点
  path.lineTo((float) (radius * Math.cos(radian / 2) + radius_in
    * Math.sin(radian)),
   (float) (radius - radius * Math.sin(radian / 2)));
  path.lineTo((float) (radius * Math.cos(radian / 2) * 2),
   (float) (radius - radius * Math.sin(radian / 2)));
  path.lineTo((float) (radius * Math.cos(radian / 2) + radius_in
    * Math.cos(radian / 2)),
   (float) (radius + radius_in * Math.sin(radian / 2)));
  path.lineTo(
   (float) (radius * Math.cos(radian / 2) + radius
    * Math.sin(radian)), (float) (radius + radius
    * Math.cos(radian)));
  path.lineTo((float) (radius * Math.cos(radian / 2)),
   (float) (radius + radius_in));
  path.lineTo(
   (float) (radius * Math.cos(radian / 2) - radius
    * Math.sin(radian)), (float) (radius + radius
    * Math.cos(radian)));
  path.lineTo((float) (radius * Math.cos(radian / 2) - radius_in
    * Math.cos(radian / 2)),
   (float) (radius + radius_in * Math.sin(radian / 2)));
  path.lineTo(0, (float) (radius - radius * Math.sin(radian / 2)));
  path.lineTo((float) (radius * Math.cos(radian / 2) - radius_in
    * Math.sin(radian)),
   (float) (radius - radius * Math.sin(radian / 2)));
  path.close();// 使这些点构成封闭的多边形
  canvas.drawPath(path, localPaint);
  break;
  }
  case 3://正六边形;
  {
  Path path= new Path();
  float radian = degree2Radian(30);
  path.moveTo((float)(radius*Math.sin(radian)), 0);
  path.lineTo((float)(radius*Math.sin(radian)+radius), 0);
  path.lineTo((float)(2*radius), (float)(radius*Math.cos(radian)) );
  path.lineTo((float)(radius*Math.sin(radian)+radius),(float)(2*(radius*Math.cos(radian))));
  path.lineTo((float)(radius*Math.sin(radian)),(float)(2*(radius*Math.cos(radian))));
  path.lineTo(0,(float)(radius*Math.cos(radian)));
  path.close();
  canvas.drawPath(path,localPaint);
  break;
  }
  default://方形
  {
  int realWidth = (mWidth>mHeight)?mHeight:mWidth-borderWidth;
  int x = padding +(mWidth-realWidth)/2;
  int y = padding +(mHeight-realWidth)/2;
  RectF localRectF=new RectF(x, y, realWidth-padding*2, realWidth-padding*2);
  canvas.drawRect(localRectF, localPaint);
  break;
  }
 }
 }
 //将角度转化为弧度
 private float degree2Radian(int degree) {
 // TODO Auto-generated method stub
 return (float) (Math.PI * degree / 180);
 }
}

2. ContactExpendListAdapter.java


package com.farina.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.farina.data.FriendEntity;
import com.farina.data.FriendListData;
import com.farina.farinaimagelib.ViaImageView;
import com.farina.libtest.R;
import java.util.List;

public class ContactExpendListAdapter extends BaseExpandableListAdapter {
 private Context mContext;
 private List<FriendListData> mListData;
 public ContactExpendListAdapter(Context context, List<FriendListData> data){
 mContext = context;
 mListData = data;
 }
 @Override
 public int getGroupCount(){
 return mListData.size();
 }
 @Override
 public int getChildrenCount(int groupPosition){
 return mListData.get(groupPosition).getFriendChildList().size();
 }
 @Override
 public Object getGroup(int groupPosition){
 return mListData.get(groupPosition).getGroupName();
 }
 @Override
 public Object getChild(int groupPosition, int childPosition){
 return mListData.get(groupPosition).getFriendChildList().get(childPosition);
 }
 @Override
 public long getGroupId(int groupPosition){
 return groupPosition;
 }
 @Override
 public long getChildId(int groupPosition, int childPosition){
 return childPosition;
 }
 @Override
 public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent){
 groupHolder viewHolder =null;
 if(convertView == null){
  convertView = LayoutInflater.from(mContext).inflate(R.layout.contact_list_group, null);
  viewHolder = new groupHolder();
  viewHolder.icon = (ImageView)convertView.findViewById(R.id.icon);
  viewHolder.groupName = (TextView)convertView.findViewById(R.id.goup_name);
  convertView.setTag(viewHolder);
 }else{
  viewHolder = (groupHolder)convertView.getTag();
 }
 viewHolder.groupName.setText(mListData.get(groupPosition).getGroupName());
 if(isExpanded){
  viewHolder.icon.setImageResource(R.mipmap.arrow_down);
 }else{
  viewHolder.icon.setImageResource(R.mipmap.arrow_up);
 }
 return convertView;
 }
 @Override
 public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
    View convertView, ViewGroup parent){
 memberHolder viewHolder = null;
 if(convertView == null){
  convertView = LayoutInflater.from(mContext).inflate(R.layout.contact_list_member, null);
  viewHolder= new memberHolder();
  viewHolder.memberImg = (ViaImageView) convertView.findViewById(R.id.member_img);
  viewHolder.memberName = (TextView)convertView.findViewById(R.id.member_name);
  convertView.setTag(viewHolder);
 }else{
  viewHolder =(memberHolder)convertView.getTag();
 }
 FriendEntity entity= mListData.get(groupPosition).getFriendChildList().get(childPosition);
 String icnPath = entity.getIcnPath();
 if(icnPath == null||icnPath.length()<=0) {
  viewHolder.memberImg.setImageDrawable(mContext.getResources().getDrawable(R.mipmap.user_img));
 }
 viewHolder.memberName.setText(entity.getName());
 return convertView;
 }
 @Override
 public boolean isChildSelectable(int groupPosition,
     int childPosition) {
 return true;
 }
 @Override
 public boolean hasStableIds(){
 return true;
 }
 private class memberHolder{
 ViaImageView memberImg;
 TextView memberName;
 }
 private class groupHolder{
 ImageView icon;
 TextView groupName;
 }
}

3. ChatInfoManager.java


package com.farina.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.farina.data.FriendEntity;
import com.farina.data.FriendListData;
import com.farina.data.GroupEntity;
import com.farina.data.MessageEntity;
import com.farina.data.UserEntity;
import java.util.ArrayList;
import java.util.List;

public class ChatInfoManager {
 private Context mContext;
 private ChatDBhelper mDBHelper;
 //table user string
 private final String USER_TABLE_NAME="users";
 private final String USER_ID="id";
 private final String USER_COUNT_NUMBER="countNumber";
 private final String USER_NIKENAME="nikeName";
 private final String USER_ICON_PATH="iconPath";
 private final String USER_PHONE_NUMBER="phoneNumber";
 private final String USER_MAIL_ADDR="mailAddr";
 private final String USER_QQ_NUMBER="qqNumber";
 private final String USER_WEIXIN_NUMBER="weixinNumber";
 //table friends string
 private final String FRIEND_TABLE_NAME="friends";
 private final String FRIEND_ID="id";
 private final String FRIEND_HOST_ID="hostId";
 private final String FRIEND_GROUP_ID="groupId";
 private final String FRIEND_NAME="friendName";
 private final String FRIEND_ICON_PATH="iconPath";
 private final String FRIEND_BELIVE="beLive";
 //table groups string
 private final String GROUP_TABLE_NAME="groups";
 private final String GROUP_ID="id";
 private final String GROUP_HOST_ID="hostId";
 private final String GROUP_NAME="groupName";
 //table messages string
 private final String MESSAGE_TABLE_NAME="messages";
 private final String MESSAGE_ID="id";
 private final String MESSAGE_MESSAGE="message";
 private final String MESSAGE_FROM_ID="fromId";
 private final String MESSAGE_TO_ID="toId";
 private final String MESSAGE_READED="readed";
 private final String MESSAGE_TYPE="type";
 private final String MESSAGE_TIME="time";
 public ChatInfoManager(Context context){
 mContext = context;
 mDBHelper = ChatDBhelper.getInstance(mContext);
 }
 public void addUser(UserEntity user){
 SQLiteDatabase db = null;
 try {
  db = mDBHelper.getWritableDatabase();
  ContentValues values = new ContentValues();
  values.put(USER_ID,user.getId());
  values.put(USER_COUNT_NUMBER,user.getCountNumber());
  values.put(USER_NIKENAME,user.getNikeName());
  values.put(USER_ICON_PATH,user.getIconPath());
  values.put(USER_PHONE_NUMBER,user.getPhoneNumber());
  values.put(USER_MAIL_ADDR,user.getMailNumber());
  values.put(USER_QQ_NUMBER,user.getQQNumber());
  values.put(USER_WEIXIN_NUMBER,user.getWeixinNumber());
  db.insert(USER_TABLE_NAME, null, values);
 } catch (Exception e) {
  e.printStackTrace();
  // TODO: handle exception
 } finally {
  db.close();
 }
 }
 public UserEntity getUserData(int index){
 UserEntity user= new UserEntity();
 SQLiteDatabase db =null;
 Cursor cursor = null;
 try {
  db = mDBHelper.getReadableDatabase();
  cursor = db.query(USER_TABLE_NAME, null, USER_ID + "=" + index, null, null, null, null);
  if (cursor != null) {
  user.setId(index);
  user.setCountNumber(cursor.getString(cursor.getColumnIndex(USER_COUNT_NUMBER)));
  user.setNikeName(cursor.getString(cursor.getColumnIndex(USER_NIKENAME)));
  user.setIconPath(cursor.getString(cursor.getColumnIndex(USER_ICON_PATH)));
  user.setPhoneNumber(cursor.getString(cursor.getColumnIndex(USER_PHONE_NUMBER)));
  user.setMailNumber(cursor.getString(cursor.getColumnIndex(USER_MAIL_ADDR)));
  user.setQQNumber(cursor.getString(cursor.getColumnIndex(USER_QQ_NUMBER)));
  user.setWeixinNumber(cursor.getString(cursor.getColumnIndex(USER_WEIXIN_NUMBER)));
  } else {
  return null;
  }
 }catch (Exception e){
  e.printStackTrace();
 }finally{
  db.close();
 }
 return user;
 }
 public List<UserEntity> getUserList(){
 List<UserEntity> list =new ArrayList<UserEntity>();
 SQLiteDatabase db =null;
 Cursor cursor=null;
 try{
  db=mDBHelper.getReadableDatabase();
  cursor=db.query(USER_TABLE_NAME,new String[]{USER_ID,USER_COUNT_NUMBER,USER_NIKENAME,USER_ICON_PATH},null,null,null,null,null);
  if(cursor!=null){
  while (cursor.moveToNext()) {
   UserEntity user= new UserEntity();
   user.setId(cursor.getInt(cursor.getColumnIndex(USER_ID)));
   user.setCountNumber(cursor.getString(cursor.getColumnIndex(USER_COUNT_NUMBER)));
   user.setNikeName(cursor.getString(cursor.getColumnIndex(USER_NIKENAME)));
   user.setIconPath(cursor.getString(cursor.getColumnIndex(USER_ICON_PATH)));
   list.add(user);
  }
  }
 }catch(Exception e){
  e.printStackTrace();
 }finally{
  db.close();
 }
 return list;
 }
 public void addFriend(FriendEntity friend){
 SQLiteDatabase db=null;
 try{
  db=mDBHelper.getWritableDatabase();
  if(db==null)return ;
  ContentValues values = new ContentValues();
  values.put(FRIEND_ID,friend.getId());
  values.put(FRIEND_HOST_ID,friend.getHostId());
  values.put(FRIEND_GROUP_ID,friend.getgroupId());
  values.put(FRIEND_NAME,friend.getName());
  values.put(FRIEND_ICON_PATH,friend.getIcnPath());
  values.put(FRIEND_BELIVE,friend.getBeLive());
  db.insert(FRIEND_TABLE_NAME,null,values);
 }catch(Exception e){
  e.printStackTrace();
 }finally {
  db.close();
 }
 }
 public List<FriendListData> getFriendList(){
 SQLiteDatabase db=null;
 List<FriendListData> friendList=new ArrayList<FriendListData>();
 List<GroupEntity> groupList= getGroupList();
 try{
  db = mDBHelper.getWritableDatabase();
  if (db == null) return null;
  for(int i=0;i<groupList.size();i++) {
  FriendListData friendGroup= new FriendListData();
  String groupName = groupList.get(i).getName();
  friendGroup.setGroupName(groupName);
  List<FriendEntity> groupChild=new ArrayList<FriendEntity>();
  Cursor cursor = db.query(FRIEND_TABLE_NAME, null, GROUP_NAME+"="+groupName, null, null, FRIEND_ID + "ASC", null);
  while (cursor.moveToNext()) {
   FriendEntity entity = new FriendEntity();
   entity.setId(cursor.getInt(cursor.getColumnIndex(FRIEND_ID)));
   entity.setgroupId(cursor.getInt(cursor.getColumnIndex(FRIEND_GROUP_ID)));
   entity.setHostId(cursor.getInt(cursor.getColumnIndex(FRIEND_HOST_ID)));
   entity.setName(cursor.getString(cursor.getColumnIndex(FRIEND_NAME)));
   entity.setIcnPath(cursor.getString(cursor.getColumnIndex(FRIEND_ICON_PATH)));
   String beLive = cursor.getString(cursor.getColumnIndex(FRIEND_BELIVE));
   entity.setBeLive(beLive.equals("1"));
   groupChild.add(entity);
  }
  friendGroup.setFriendChildList(groupChild);
  friendList.add(friendGroup);
  }
 }catch(Exception e){
  e.printStackTrace();
 }finally {
  db.close();
 }
 return friendList;
 }
 public List<GroupEntity> getGroupList(){
 List<GroupEntity> groupList = null;
 SQLiteDatabase db=null;
 try{
  db= mDBHelper.getReadableDatabase();
  Cursor cursor =db.query(GROUP_TABLE_NAME,null,null,null,null,null,null);
  while(cursor.moveToNext()){
  GroupEntity entity =new GroupEntity();
  entity.setId(cursor.getInt(cursor.getColumnIndex(GROUP_ID)));
  entity.setHostId(cursor.getInt(cursor.getColumnIndex(GROUP_HOST_ID)));
  entity.setGroupName(cursor.getString(cursor.getColumnIndex(GROUP_NAME)));
  groupList.add(entity);
  }
 }catch(Exception e){
  e.printStackTrace();
 }finally{
  db.close();
 }
 return groupList;
 }
 public void addGroupMember(GroupEntity group){
 SQLiteDatabase db=null;
 try{
  db=mDBHelper.getWritableDatabase();
  ContentValues values=new ContentValues();
  values.put(GROUP_ID,group.getId());
  values.put(GROUP_HOST_ID,group.getHostId());
  values.put(GROUP_NAME,group.getName());
  db.insert(GROUP_TABLE_NAME,null,values);
 }catch(Exception e){
  e.printStackTrace();
 }finally {
  db.close();
 }
 }
 public List<MessageEntity> getMessageList(String loadId){
 List<MessageEntity> list = new ArrayList<MessageEntity>();
 SQLiteDatabase db=null;
 Cursor cursor=null;
 try{
  db=mDBHelper.getReadableDatabase();
  cursor=db.query(MESSAGE_TABLE_NAME,null,
   MESSAGE_FROM_ID+"=?,"+MESSAGE_TO_ID+"=?",
   new String[]{loadId},
   null,
   loadId,MESSAGE_TIME+"DES",null);
  while(cursor.moveToNext()){
  MessageEntity entity =new MessageEntity();
  entity.setId(cursor.getInt(cursor.getColumnIndex(MESSAGE_ID)));
  entity.setFromId(cursor.getInt(cursor.getColumnIndex(MESSAGE_FROM_ID)));
  entity.setToId(cursor.getInt(cursor.getColumnIndex(MESSAGE_TO_ID)));
  entity.setMessageStr(cursor.getString(cursor.getColumnIndex(MESSAGE_MESSAGE)));
  entity.setType(cursor.getString(cursor.getColumnIndex(MESSAGE_TYPE)));
  entity.setTime(cursor.getString(cursor.getColumnIndex(MESSAGE_TIME)));
  list.add(entity);
  }
 }catch (Exception e){
  e.printStackTrace();
 }finally{
  db.close();
 }
 return list;
 }
 public void setMessageItem(MessageEntity message){
 SQLiteDatabase db=null;
 try{
  db=mDBHelper.getWritableDatabase();
  if(db==null)return;
  ContentValues values = new ContentValues();
  values.put(MESSAGE_ID,message.getId());
  values.put(MESSAGE_FROM_ID,message.getFromId());
  values.put(MESSAGE_TO_ID,message.getToId());
  values.put(MESSAGE_MESSAGE,message.getMessageStr());
  values.put(MESSAGE_TYPE,message.getType());
  values.put(MESSAGE_TIME,message.getTime());
  db.insert(MESSAGE_TABLE_NAME,null,values);
 }catch(Exception e){
  e.printStackTrace();
 }finally {
  db.close();
 }
 }
}

源码下载地址

您可能感兴趣的文章:android socket聊天室功能实现android Socket实现简单聊天功能以及文件传输Android 基于Socket的聊天应用实例(二)Android 基于Socket的聊天室实例Android基于socket实现的简单C/S聊天通信功能Android聊天工具基于socket实现Android中基于XMPP协议实现IM聊天程序与多人聊天室Android蓝牙通信聊天实现发送和接受功能安卓(Android)聊天机器人实现代码分享android Socket实现简单聊天小程序


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

适用于Android开发的简单聊天软件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

适用于Android开发的简单聊天软件

适用于android 开发。是一个简单的聊天软件,包括知识点,各个控件的运用(ExpandableListView,ViewPager,Spinner,LinearLayout,RelativeLayot),自定义的ViaImageView
2022-06-06

Android编写简单的聊天室应用

最近写了一个简单的聊天室应用,可以发送表情,更改头像这些功能。主要技术点就是怎样把表情图片放到textview等Ui控件中展示。这里废话不多说,下面是效果图: 这里主要讲下怎样把文本替换到表情,先说下思路,首先我们的图片是保存在本地资源目录
2022-06-06

如何用Go语言开发一个简单的聊天应用

如何用Go语言开发一个简单的聊天应用随着互联网的快速发展,聊天应用成为人们日常生活中不可或缺的一部分。而Go语言作为一种快速、可靠和高效的编程语言,越来越受到开发者的青睐。本文将介绍如何用Go语言开发一个简单的聊天应用。一、项目概述我们将使
如何用Go语言开发一个简单的聊天应用
2023-11-20

Android基于socket实现的简单C/S聊天通信功能

本文实例讲述了Android基于socket实现的简单C/S聊天通信功能。分享给大家供大家参考,具体如下: 主要想法:在客户端上发送一条信息,在后台开辟一个线程充当服务端,收到消息就立即回馈给客户端。 第一步:创建一个继续Activity的
2022-06-06

android应用开发之spinner控件的简单使用

Android的控件有很多种,其中就有一个Spinner的控件,这个控件其实就是一个下拉显示列表。Spinner是位于 android.widget包下的,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中
2022-06-06

Go语言适用于哪些类型的软件开发?

Go语言是一种由谷歌开发的编程语言,具有高效的并发处理能力和简洁的语法结构,使得它在各种软件开发领域都有广泛的应用。下面将分析Go语言适用于哪些类型的软件开发,并提供具体的代码示例。网络编程:Go语言天生支持并发编程,适合用于网络编程,特别
Go语言适用于哪些类型的软件开发?
2024-03-09

如何使用Python开发基于ChatGPT的聊天机器人

如何使用Python开发基于ChatGPT的聊天机器人随着人工智能的不断进步,聊天机器人已经成为了许多网站和应用程序的常见功能。而ChatGPT(Generative Pre-trained Transformer)是OpenAI开发的一种
2023-10-24

Android开发中WebView的简单使用小结

前言 WebView(网络视图)在Andorid中就是用来显示网页的,下面我们来一起看看它是如何使用的。 一、基本使用1.声明权限,WebView不可避免地要用到网络,我们要加上网络访问权限。
2022-06-06

Android开发中CheckBox的简单用法示例

本文实例讲述了Android开发中CheckBox的简单用法。分享给大家供大家参考,具体如下: CheckBox是一种在界面开发中比较常见的控件,Android中UI开发也有CheckBox,简单的说下它的使用,每个CheckBox都要设置
2022-06-06

如何利用ChatGPT PHP开发基于语言模型的聊天应用

如何利用ChatGPT PHP开发基于语言模型的聊天应用一、介绍ChatGPTChatGPT是由OpenAI开发的一款基于语言模型的聊天系统,可以生成自然流畅的文本回复。我们可以利用ChatGPT PHP开发一个基于语言模型的聊天应用,实现
2023-10-25

关于Android高德地图的简单开发实例代码(DEMO)

废话不多说了,直接给大家上干货了。 以下为初次接触时 ,练手的DEMOimport android.app.Activity; import android.app.ProgressDialog; import android.cont
2022-06-06

简单介绍Android开发中的Activity控件的基本概念

Activity是最基本的模块,一般称之为"活动",在应用程序中,一个Activity通常就是一个单独的屏幕。简单理解,Activity代表一个用户所能看到的屏幕,主要用于处理应用程序的整体性工作,例如监听系统事件,为用户显示指定的View
2022-06-06

Android利用Service开发简单的音乐播放功能

这篇文章主要介绍了Android利用Service开发简单的音乐播放功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-05-15

Android开发中类加载器DexClassLoader的简单使用讲解

简介 “类装载器”(ClassLoader),顾名思义,就是用来动态装载class文件的。标准的Java SDK中有个ClassLoader类,借助此类可以装载需要的class文件,前提是ClassLoader类初始化必须制定class文件
2022-06-06

Android怎么用Service开发简单的音乐播放功能

这篇文章主要介绍“Android怎么用Service开发简单的音乐播放功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android怎么用Service开发简单的音乐播放功能”文章能帮助大家解决问
2023-07-06

简单掌握Android开发中彩信的发送接收及其附件的处理

一. 彩信发送: 彩信比短信麻烦很多。从sendMmsWorker函数的参数就可以看出来:(conv, mmsUri, persister, slideshow, sendReq) 上下文,uri,PduPersister(彩信是用pd
2022-06-06

Android系统开发中log的使用方法及简单的原理

在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录。在Android系统中,提供了简单、便利的LOG机制,开发人员可以方便地使用。在平时开发过程中经常需要与log打交道,所以
2022-06-06

如何利用MySQL和C++开发一个简单的邮件发送功能

如何利用MySQL和C++开发一个简单的邮件发送功能摘要:本文将介绍如何以MySQL数据库为基础,使用C++编程语言开发一个简单的邮件发送功能。文章主要包括以下几个方面的内容:数据库设计、C++代码实现和邮件发送功能的实现。一、数据库设计在
2023-10-22

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录