Ç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
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);
AsyncTask örneği Android...
android TextView:'çalışmıyor arka...
OnİtemCLickListener liste görünümü AND...
AsyncTask ve hata Android kullanma...
AsyncTask konuları hiç (Android)ölmek...