kullanılarak tamamlandığında tetikleyici olayı Dinleyiciler'in sınıflar ve aktiviteler arasında bilgi aktarımı hakkında nasıl bir kafa karışıklık yaşıyorum. Bir SQLite veritabanından veri okur ve daha sonra ekranda görüntüleyen bir Adaptörü geçirilir bir ArrayList içine bu verileri koyar bir görev var
: AsyncTask, Dinleyici
senaryo
budur.Soru:
Dinleyici arabirimini bir değerle güncelleştirmeye çalıştığımda uygulamanız çöküyor. Logcat'ta hiçbir şey göstermiyor ... sadece uygulamayı kapatır. Birisi yanlış gittiğimi gösterebilir. - Teşekkürler
Ayrıntılar:
Veritabanının işlenmesi DatbaseRoutines adlı bir sınıf tarafından yapılmış ve bunun içinde ağır kaldırma işlemini yapan bir iç yöntem var. Metot, asyncTask'ı ana iş parçacığını kastetmeyecek şekilde kullanıyor.
Ben o
public void setDbProcesslistener(DatabaseProcessListener dbProcesslistener) {
this.dbProcesslistener = dbProcesslistener;
}
için bir ayarlayıcı ile birlikte özel bir değişkeni
private DatabaseProcessListener dbProcesslistener;
oluşturma Benim DatabaseRoutines sınıfında tek yöntemle
public interface DatabaseProcessListener {
public void ProcessingIsDone(boolean blnProcessIsFinished);
}
oluşturulan ve Arayüz var İşlem bittiğinde, Dinleyici'yi güncellemek için PostExecute yöntemini kullanıyorum, böylece bunu yapabilirsiniz True olarak dinleyici değeri değiştirin (yani db işleme yapılır yani) aşağıda kod ben dinleyici uygulamak veritabanından toplanan verilerin görüntülenmesi aktivitesinde Nihayet
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
dialog.dismiss(); //i have progress dialog during processing and its
//closed here
if (blnUpdateSucceededStatus)
{
dbProcesslistener.ProcessingIsDone(true);
}
else
{
Toast.makeText(ctx, "Transactions Processing
failed",Toast.LENGTH_SHORT);
} ;
olduğunu. aşağıya bakınız. i logcat bulduğumuz bazı kazma sonra
public class MyActivity extends Activity implements DatabaseProcessListener
{
@Override
public void ProcessingIsDone(boolean blnProcessIsFinished) {
if(blnProcessIsFinished){
PopulateExpandableListView();
}
public void PopulateExpandableListView() {
//code for populating the listview goes here;
}
}
05-05 11:11:18.590: ERROR/AndroidRuntime(22339): FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.mledger.DatabaseRoutines$1.onPostExecute(DatabaseRoutines.java:258)
at com.example.mledger.DatabaseRoutines$1.onPostExecute(DatabaseRoutines.java:141)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(Native Method)
Maalesef uygulama asılı bir nullpointer istisna error..its ve arayüz asla yapılır gerçek (yani işleme verileri görüntüler Aktivite günceller
Bana doğru yönde işaret et. -
düşünmeye çalıştım herkese
teşekkürler AsyncTask için çağırıldım. – Anirudh
Evet yaptım. Bir kesme noktası koyuyorum ve sadece dinleyiciyi çağıran çizgide donuyor. teşekkürler – KuriaNdungu