Диалог асинхронной задачи

1

У меня проблема с переносом некоторого исходного кода в Asynctask.

Я читал несколько примеров Asynctask, а также статью разработчика Android на Asynctask, но мне трудно сопоставить ее с моим кодом в недоступном для понимания месте.

Код ниже дает мне ошибку и силу закрывается при выполнении 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;

Я бы очень признателен за любую помощь.

  • 0
    что делает createFinalList ? согласно вашему описанию, ошибки приходят оттуда или из вашей базы данных
Теги:
android-asynctask
progressdialog

2 ответа

0

Просто проверьте свой код:

 @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);
  • 0
    нет никакой связи между этими двумя линиями.
  • 0
    @ njzk2 Ты уверен? Позвольте мне, как вы можете установить адаптер до того, как получите ListView.
Показать ещё 1 комментарий
-1

создайте эту строку ProgressDialog pDialog = новый ProgressDialog (Home.this); в стороне от класса AsynTask

  • 0
    создание ProgressDialog находится в onPreExecute, что является правильным способом сделать это.
  • 0
    тогда эта строка не требуется ProgressDialog pDialog = new ProgressDialog (Home.this);
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню