【发布时间】:2016-05-10 13:34:19
【问题描述】:
我有一个应用程序可以在我的手机上从 sql database 加载项目,我所做的是我从 onResume() 方法加载项目,但查看事物并不是最有效的方式,我总是可以看到这些项目当我查看whatsApp 或contacts 等其他应用程序时正在加载,应用程序甚至看不到正在加载的项目。以我目前的加载方式,我的应用程序不仅速度慢,而且还进行了不必要的处理,有没有人知道我可以实现的更好更有效的方式?非常感谢您。
我的 Sql 数据库类概述:
public class Database extends SQLiteOpenHelper {
//My list that holds my database items(which in my case is receipts)
private ArrayList<Receipt> allReceipts = new ArrayList<>();
public ArrayList<Receipt> getAllReceipts() {
try {
allReceipts.clear();
// Select All Query
String selectQuery = "SELECT * FROM " + Constants.RECEIPT_TABLE;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if(cursor != null)
if (cursor.moveToFirst()) {
do {
Receipt receipt = new Receipt();
receipt.setId(Integer.parseInt(cursor.getString(0)));
receipt.setMerchantName(cursor.getString(1));
receipt.setPrice(cursor.getString(2));
// Adding contact to list
allReceipts.add(receipt);
} while (cursor.moveToNext());
}
if(cursor != null)
cursor.close();
db.close();
return allReceipts;
} catch (Exception e) {
// TODO: handle exception
Log.e("all_receipts", "" + e);
}
return allReceipts;
}
收到收据的我的片段
private void initRecycler()
{
Action<List<ParentListItem>> action = new Action<List<ParentListItem>>() {
@NonNull
@Override
public String id() {
// Return a unique ID.
return "load all receipts";
}
@Nullable
@Override
protected List<ParentListItem> run() throws InterruptedException {
receiptArrayList = database.getAllReceipts();
return getReceipts();
}
@Override
protected void done(@Nullable final List<ParentListItem> receipts) {
progress.stop();
assert receipts != null;
if(receipts.isEmpty()) {
}else {
childAdapterListeners();
adapter = new ReceiptExpandableAdapter(getContext(), receipts, onItemClickListenerCheckBtn, onItemClickListenerDeleteBtn, mOntemClickListenerViewBtn);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
// recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
recyclerView.setAdapter(adapter);
}
}
};
action.execute();
}
@Override
public void onResume()
{
initRecycler();
super.onResume();
}
【问题讨论】:
-
这真是一个宽泛的问题,有很多因素吗?可以发一下代码吗?
-
请稍等
-
尝试获取有限数量的数据记录(页)。仅当用户滚动到它们时才获取下一页。
-
我该怎么做?
标签: android sqlite android-recyclerview