您的位置:首页 > 移动开发

即时通讯APP的开发

2016-03-16 22:04 351 查看
开发思路

1,使用数据库存储数据,利用观察者模式实现数据和视图刷新的解耦

2,具体使用观察者模式实现每次加入数据动作的时候的通知界面去刷新

3,难点:输入视图的控制、表情的使用,数据的查询,加载更多

4,上拉加载更多的做法:从数据库中查询的条目的所有的个数,然后使用滑动的设置当前条目显示的个数,然后通过滑动的回调,显示加载更多条目

5,加载数据的数据的时候cursor的服务类的写法

package com.example.testscrollsqlite;
 
import java.util.ArrayList;
 
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
 
public class DatabaseService {
 
private Context mContext;
private MyDBOpenHelper dbHelper;
 
public DatabaseService(Context context) {
// TODO Auto-generated constructor stub
mContext = context;
dbHelper = new MyDBOpenHelper(mContext);
}
 
// 添加
public void insert(String title) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "insert into database(title) values(?)";
db.execSQL(sql, new String[] { title });
}
 
// 删除
public void delete(String title) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "delete from database where title = ?";
db.execSQL(sql, new String[] { title });
}
 
// 查找
public ArrayList<String> find(int id) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "select * from database where _id = ? ";
Cursor c = db.rawQuery(sql, new String[] { String.valueOf(id) });
ArrayList<String> titles = new ArrayList<String>();
if (c.moveToNext()) {
String title = c.getString(c
.getColumnIndexOrThrow(MyDBOpenHelper.FIELD_TITLE));
titles.add(title);
return titles;
}
// 不用忘记关闭Cursor。
c.close();
return null;
}
 
// 更新
public void upDate(int id, String title) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "update database set title =? where _id = ?";
db.execSQL(sql,
new String[] { String.valueOf(title), String.valueOf(id) });
}
 
// 查询记录的总数
public int getCount() {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "select count(*) from database";
Cursor c = db.rawQuery(sql, null);
c.moveToFirst();
int length = c.getInt(0);
c.close();
return length;
}
 
/**
 * 分页查询
 * 
 * @param currentPage 当前页
 * @param pageSize 每页显示的记录
 * @return 当前页的记录
 */
public ArrayList<String> getAllItems(int currentPage, int pageSize) {
int firstResult = (currentPage - 1) * pageSize;
int maxResult = currentPage * pageSize;
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = "select * from database limit ?,?";
Cursor mCursor = db.rawQuery(
sql,
new String[] { String.valueOf(firstResult),
String.valueOf(maxResult) });
ArrayList<String> items = new ArrayList<String>();
int columnCount  = mCursor.getColumnCount();
while (mCursor.moveToNext()) {
String item = mCursor.getString(mCursor
.getColumnIndexOrThrow(MyDBOpenHelper.FIELD_TITLE));
items.add(item);
}
//不要关闭数据库
return items;
}
}


以上就是写的一个中间类,用来定义每次的界面加载的个数,在监听滑动的动作的时候回调的时候将回调然后每次定义加载的个数

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: