Step2:数据库的建立(MyDB.java)
创建三个表格,用户信息User,评论信息Comment,用户与点赞数的关联表UC下面是MyDB.java的关键代码:
public static final String CREATE_USER="create table User ("
+ "username text primary key,"
+ "password text,"
+ "portrait blob)";
public static final String CREATE_COMMENT = "create table Comment ("
+ "id integer primary key autoincrement,"
+ "username text,"
+ "date text,"
+ "comment text,"
+ "likeNum integer)";
public static final String CREATE_UC = "create table UC ("
+ "id integer primary key autoincrement,"
+ "commentId integer,"
+ "username text)";
//...
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(CREATE_USER);
db.execSQL(CREATE_COMMENT);
db.execSQL(CREATE_UC);
Toast.makeText(mContext,"Create Succeeded",Toast.LENGTH_SHORT).show();
}
Step4:为ListView设置一个适配器,这个稍微麻烦一点,根据传过来的CommentInfo对象将信息实例到ListView的每一个条目里,头像就根据CommentInfo对象的用户名从User表格里查找出对应的头像;还要更具UC关联表判断对应的条目里的点赞按钮的状态,下面是MyListViewAdapter.java中的getView函数和对应的ViewHolder类。
@Override
public View getView(int position, View convertView, ViewGroup parent){
final CommentInfo item = getItem(position);
final View view;
final ViewHolder viewHolder;
if(convertView == null){
view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
viewHolder = new ViewHolder();
viewHolder.portrait = (ImageView)view.findViewById(R.id.item_portrait);
viewHolder.username = (TextView)view.findViewById(R.id.item_username);
viewHolder.date = (TextView)view.findViewById(R.id.item_date);
viewHolder.comment = (TextView)view.findViewById(R.id.item_comment);
viewHolder.likeNumber = (TextView)view.findViewById(R.id.item_like_num);
viewHolder.likePic = (ImageView) view.findViewById(R.id.item_like_pic);
view.setTag(viewHolder);
}else{
view = convertView;
viewHolder = (ViewHolder)view.getTag();
}
viewHolder.username.setText(item.GetUsername());
viewHolder.date.setText(item.GetDate());
viewHolder.comment.setText(item.GetComment());
viewHolder.likeNumber.setText(String.valueOf(item.GetLikeNum()));
MyDB dbHelper = new MyDB(view.getContext(),"User.db",null,1);
final SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from User where username = ?",new String[]{item.GetUsername()},null);
if(cursor.getCount() > 0){
cursor.moveToFirst();
byte[] in = cursor.getBlob(cursor.getColumnIndex("portrait"));
Bitmap bitmap = BitmapFactory.decodeByteArray(in,0,in.length);
viewHolder.portrait.setImageBitmap(bitmap);
}
cursor.close();
cursor = db.rawQuery("select * from UC where commentId = ? and username = ?",new String[]{String.valueOf(item.GetId()),CommentActivity.username});
if(cursor.getCount() > 0 ){
viewHolder.likePic.setImageResource(R.drawable.red);
viewHolder.likePic.setTag(R.drawable.red);
}else{
viewHolder.likePic.setImageResource(R.drawable.white);
viewHolder.likePic.setTag(R.drawable.white);
}
viewHolder.likePic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( R.drawable.white == (Integer)viewHolder.likePic.getTag() ){
viewHolder.likePic.setImageResource(R.drawable.red);
viewHolder.likePic.setTag(R.drawable.red);
item.SetLikeNum(item.GetLikeNum()+1);
viewHolder.likeNumber.setText(String.valueOf(item.GetLikeNum()));
ContentValues values = new ContentValues();
values.put("likeNum",item.GetLikeNum());
db.update("Comment",values,"id = ?",new String[]{String.valueOf(item.GetId())});
values.clear();
values.put("commentId",item.GetId());
values.put("username",CommentActivity.username);
db.insert("UC",null,values);
}else{
viewHolder.likePic.setImageResource(R.drawable.white);
viewHolder.likePic.setTag(R.drawable.white);
item.SetLikeNum(item.GetLikeNum()-1);
viewHolder.likeNumber.setText(String.valueOf(item.GetLikeNum()));
ContentValues values = new ContentValues();
values.put("likeNum",item.GetLikeNum());
db.update("Comment",values,"id = ?",new String[]{String.valueOf(item.GetId())});
values.clear();
db.delete("UC","commentId = ? and username = ?",new String[]{String.valueOf(item.GetId()),CommentActivity.username});
}
}
});
return view;
}
class ViewHolder{
ImageView portrait;
TextView username,date,comment,likeNumber;
ImageView likePic;
}