[英]Asynctask progress dialog
將一些初始代碼移入Asynctask時遇到問題。
我一直在閱讀一些Asynctask示例以及有關Asynctask的Android開發人員文章,但是我發現很難將其與我的代碼關聯起來。
下面的代碼給我一個錯誤,執行doInBackground()時強制關閉,原因是:java.lang.RuntimeException:無法在未調用Looper.prepare()的線程內創建處理程序
public class LoadingDialog extends AsyncTask<ArrayList<HashMap<String, String>>, Void, ArrayList<HashMap<String, String>>>
{
ProgressDialog pDialog = new ProgressDialog(Home.this);
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
pDialog = ProgressDialog.show(Home.this, "", "Loading...");
}
protected ArrayList<HashMap<String, String>> doInBackground(ArrayList<HashMap<String, String>>... params) {
// TODO Auto-generated method stub
finalList.clear();
eventList = database.getEvents();
venueList = database.getVenues();
finalList = createFinalList(eventList, venueList);
return finalList;
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
// TODO Auto-generated method stub
pDialog.dismiss();
ListAdapter adapter = new SimpleAdapter(Home.this, finalList , R.layout.home,
new String[] { "eventName", "venueName", "startTime"},
new int[] { R.id.item_title, R.id.item_subtitle, R.id.item_datetime });
setListAdapter(adapter);
lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
Intent i = new Intent(Home.this, EventInfo.class);
HashMap<String, String> map = finalList.get(position);
String eID = map.get("eventId");
String name = map.get("eventName");
String venue = map.get("venueName");
String lati = map.get("venueLatitude");
String longi = map.get("venueLongitude");
String opening = map.get("openingTimes");
String descrip = map.get("venueDescription");
String vID = map.get("venueId");
String email = map.get("venueEmail");
String phone = map.get("venuePhone");
String facebook = map.get("venueFacebook");
String twitter = map.get("venueTwitter");
i.putExtra("itemId", eID);
i.putExtra("itemName", name);
i.putExtra("venueName", venue);
i.putExtra("venueLati", lati);
i.putExtra("venueLong", longi);
i.putExtra("opening", opening);
i.putExtra("venueDescription", descrip);
i.putExtra("venueID", vID);
i.putExtra("venueEmail", email);
i.putExtra("venuePhone", phone);
i.putExtra("venueFacebook", facebook);
i.putExtra("venueTwitter", twitter);
startActivityForResult(i, 0);
}
});
}
}
這是家庭課程的一部分:
public class Home extends ListActivity {
int eventid;
String[] venue = null;
String[] name = null;
private SqlParser database = new SqlParser();
private ArrayList<HashMap<String, String>> eventList = new ArrayList<HashMap<String, String>>();
private ArrayList<HashMap<String, String>> venueList = new ArrayList<HashMap<String, String>>();
private ArrayList<HashMap<String, String>> finalList = new ArrayList<HashMap<String, String>>();
ListView lv = null;
我真的很感謝您的幫助。
創建此行ProgressDialog pDialog = new ProgressDialog(Home.this); 在AsynTask類的外面
只需檢查您的代碼:
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
// TODO Auto-generated method stub
pDialog.dismiss();
ListAdapter adapter = new SimpleAdapter(Home.this, finalList , R.layout.home,
new String[] { "eventName", "venueName", "startTime"},
new int[] { R.id.item_title, R.id.item_subtitle, R.id.item_datetime });
setListAdapter(adapter);
lv = getListView();
在這里,您嘗試在實際獲取ListView之前將適配器設置為listview。
應該是這樣的:
lv = getListView();
setListAdapter(adapter);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.