SORU
2 ŞUBAT 2012, PERŞEMBE


Çalışmıyor AsyncTask doİnBackground Android SDK (alt)

15/2/2012 henüz ne bir neden bu çalışmıyor neden iyi bir açıklama bulmak lazım. Bir çözüm için en yakın Thread geleneksel yaklaşım kullanmaktır, ama neden (gibi görünüyor) Android SDK çalışmayan bir sınıf vardır o zaman?

'YANİ! akşam

AsyncTask bir alt sınıf var:

// ParseListener had a callback which was called when an item was parsed in a
// RSS-xml, but as stated further down it is not used at all right now.
private class xmlAsync extends AsyncTask<String, RSSItem, Void> implements ParseListener

Bu gibi yürütülür:

xmlAsync xmlThread = new xmlAsync();

xmlThread.execute("http://www.nothing.com");

Şimdi bu alt küçük bir hata içine çalıştırın. Daha önce bazı xml ayrıştırma yaptı, ama o an farkettim() doİnBackgroundaşağı, satır satır gezdim, sonunda sadece bu olan biten söylenmez:

@Override
protected Void doInBackground(String... params) 
{
    Log.v(TAG, "doInBackground");
        return null;
}

Nedense, hiçbir şey kaydedilir. Ancak, bu ekledi:

@Override
protected void onPreExecute() 
{
        Log.v(TAG, "onPreExecute");
        super.onPreExecute();
}

Ve bu hat gerçekten bu iş parçacığı yürütülürken kaydedilir.() Bir şekilde onPreExecute aradı ama doİnBackground(). Gayet güzel çalışıyor başka bir AsyncTask aynı zamanda arka planda çalışan var.

Şu anda emülatör, SDK Sürümünü app koşuyorum 15, Eclipse, Mac OS X 10.7.2, Kuzey Kutbu'na yakın.

DÜZENLEME:

@Override
    protected void onProgressUpdate(RSSItem... values) {

        if(values[0] == null)
        {
                            // activity function which merely creates a dialog
            showInputError();
        }
        else
        {

            Log.v(TAG, "adding " values[0].toString());
            _tableManager.addRSSItem(values[0]);
        }


        super.onProgressUpdate(values);
    }

_tableManager.() addRSSİtem daha fazla veya daha az ekler bir SQLiteDatabase, etkinlik kapsamında başlatılan bir satır. () publishProgress Arabirim ParseListener geri çağırma tarafından çağrıldı. Hatta hiçbir şey yapmıyorum beri ancak, dışında günlük.doİnBackground v() ben ilk bu gereksiz bile getirmek için bulundu.

EDİT 2:

Tamam, şunu açıklığa kavuşturalım, bu diğer AsyncTask, aynı alanda faaliyet yürütülüyor ve gayet iyi çalışıyor.

private class dbAsync extends AsyncTask<Void, RSSItem, Void>
{
    Integer prevCount;
    boolean run;

    @Override
    protected void onPreExecute() {
        run = true;
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        run = true;
        prevCount = 0;

        while(run)
        {
            ArrayList<RSSItem> items = _tableManager.getAllItems();

            if(items != null)
            {
                if(items.size() > prevCount)
                {
                    Log.v("db Thread", "Found new item(s)!");
                    prevCount = items.size();

                    RSSItem[] itemsArray = new RSSItem[items.size()];

                    publishProgress(items.toArray(itemsArray));
                }
            }               

            SystemClock.sleep(5000);
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(RSSItem... values) {

        ArrayList<RSSItem> list = new ArrayList<RSSItem>();

        for(int i = 0; i < values.length; i  )
        {
            list.add(i, values[i]);
        }

        setItemsAndUpdateList(list);

        super.onProgressUpdate(values);
    }

    @Override
    protected void onCancelled() {
        run = false;

        super.onCancelled();
    }
}

EDİT 3:

Nefes, kusura bakma soru sorma konusunda kötüyüm. Ama burada görev başlatma.

xmlAsync _xmlParseThread;
dbAsync _dbLookup;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

_dbLookup = new dbAsync();
_dbLookup.execute();

_xmlParseThread = new xmlAsync();       
_xmlParseThread.execute("http://www.nothing.com", null);
}

CEVAP
15 AĞUSTOS 2012, ÇARŞAMBA


Bu cevap kontrol etmelisiniz: http://stackoverflow.com/a/10406894/347565 içerir google grupları için bağlantı.

Sen de benzer bir sorun, hala çalışmıyor neden belirsiz vardı, ama bu gibi Şifremi değiştirdim ve sorun gitti

ASyncTask<Void,Void,Void> my_task = new ASyncTask<Void,Void,Void>() { ... };
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
    my_task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[])null);
else
    my_task.execute((Void[])null);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008
  • SuperPrincessjo

    SuperPrinces

    1 EKİM 2010
  • The Amazing Atheist

    The Amazing

    20 Kasım 2006