我有一个扩展Activity
这个类作业的类是从手机上的SQLite
数据库获取一些数据,以及init。一个ListView
,包含数据库中的所有数据。
这是从数据库获取信息的方法:
public ArrayList<Case> getFromDatabase() {
ArrayList<Case> c = db1.getAllContacts();
return c;
}
如前所述,此方法位于扩展Activity
的类中。此方法在onCreate
方法中调用。如果数据库包含大约15条记录,则此操作大约需要2秒。当用户按下按钮开始此活动时,如何显示正在发生的事情,我该如何显示ProgressDialog?
答案 0 :(得分:1)
我建议你将数据库包装在ContentProvider中,然后使用CursorLoader为ListActivity提供动力。这将避免占用您的UI线程,避免需要进度条,在数据库内容更改时负责更新列表等等。 (如果您只想要设备中的联系人,则已经有Contacts Content Provider。)
答案 1 :(得分:1)
通过在onCreate方法之外声明ProgressDialog变量,将ProgressDialog创建为活动的字段:
ProgressDialog pd=null;
通过在onCreate方法之外编写以下块,在Activty中创建一个Handler作为字段。
Handler handler=new Handler()
{
public void handleMessage(Message msg)
{
pd.dismiss();
//do other operations on EventThread.
ArrayList<Case> c= (ArrayList<Case>)msg.obj;
//Process c
}
}
现在在onCreate方法中用以下代码替换你的代码:
pd=ProgressDialog.show(YourActivity.this, "title", "subtitle");
Thread thread=new Thread()
{
public void run()
{
ArrayList<Case> c = db1.getAllContacts();
Message msg=handler.obtainMessage();
msg.obj=c;
handler.sendMessage(msg);
}
};
thread.start();
答案 2 :(得分:0)
使用AsyncTask显示ProgressDialog并在后台获取数据。
new FetchRSSFeeds().execute();
然后创建类
private class FetchRSSFeeds extends AsyncTask<String, Void, Boolean> {
private ProgressDialog dialog = new ProgressDialog(HomeActivity.this);
/** progress dialog to show user that the backup is processing. */
/** application context. */
protected void onPreExecute() {
this.dialog.setMessage("Please wait");
this.dialog.show();
}
protected Boolean doInBackground(final String... args) {
try {
/**
* Fetch the data
*/
Utilities.arrayRSS = objRSSFeed.FetchRSSFeeds(Constants.Feed_URL);
return true;
} catch (Exception e) {
Log.e("tag", "error", e);
return false;
}
}
@Override
protected void onPostExecute(final Boolean success) {
if (dialog.isShowing()) {
dialog.dismiss();
}
// Setting data to list adaptar
setListData();
txtTitle.setText(Utilities.RSSTitle);
}
}
答案 3 :(得分:0)
以下是如何执行此操作的示例。基本上查找并使用AsyncTask
http://www.vogella.com/articles/AndroidPerformance/article.html
答案 4 :(得分:0)