AsyncTask-da xaritani joylashtirish ballarni ko'rish uchun ekranga teginish kerak

Mening mapview bilan muammo bor - Men uni AsyncTask bilan to'ldiraman, lekin u tugallangandan so'ng ekranlar tugmaguncha ko'rsatilmaydi (barcha sensorli nuqtalar to'g'ri ko'rsatilgandan keyin).

Oncreate:

dialog = ProgressDialog.show (MyMap.this, "xaritani joylashtirish",                 "Iltimos, kuting ...", true);

     

yangi AddOverlays() funktsiyasini bajarish. ();

AsyncTask:

class AddOverlays extends AsyncTask {
        @Override
        protected String doInBackground(Void... unsued) {

                //do my looping work to add items to map

            mapOverlays.add(itemizedOverlay);   

            String nothing = "";
            return nothing;
        }

        @Override
        protected void onProgressUpdate(Void... unsued) {

        }

        @Override
        protected void onPostExecute(String sResponse) {
            if (dialog.isShowing())
                dialog.dismiss();
        }
    }
2
MapActivity ilovasida AsyncTask ichki sinf sifatida foydalanasizmi yoki vazifani bajarish uchun Service dan foydalanasiz? Agar shunday bo'lsa, serializable emas, chunki MapView ma'lumotnomasini niyat bilan qanday qilib o'tkazasiz?
qo'shib qo'ydi muallif JJD, manba

1 javoblar

Qo'ng'iroq qilib ko'ring: invalidate() ni UI ishidan olib tashlash yoki postInvalidate() -ni boshqa bir mavzudan olishingiz mumkin

MapView obyektida xarita ko'rinishini qayta bo'yaltirish uchun foydalaning.

onPostExecute (string sResponse) da mapOverlays.add (itemizedOverlay) deb chaqirishingiz kerak, chunki yangi qoplama qimmat ish emas.

Menimcha, doInBackground (Void ... unused) da juda qimmat operatsiya qilasiz, chunki hozirda butun AddOverlays vazifasi kerak emas.

2
qo'shib qo'ydi
OnPostExecute-ga qo'shildim, ammo buni hal qilmadim, shuning uchun orqaga qaytdim. Ha, doInBackground'da juda og'ir yuk ko'tarish bor. RE: bekor qilish yoki PostInvalidate - bu xaritalashning onCreate-da nimani anglatasiz? Siz namuna bera olasizmi?
qo'shib qo'ydi muallif bMon, manba
PostInvalidate-ni onPostExecute-ga qo'shishim mumkinmi? Agar shunday bo'lsa, qanday qilib?
qo'shib qo'ydi muallif bMon, manba
Ha, rahmat.
qo'shib qo'ydi muallif bMon, manba
onPostExecute() faqatgina mapView.invalidate() ni chaqiring, bu erda mapView o'zgaruvchisi MapView obyektingizga havola qiladi :)
qo'shib qo'ydi muallif Tomasz, manba