리스너를 사용하여 클래스와 활동간에 정보를 전달하는 방법에 혼란을 느낍니다.리스너를 사용하여 AsyncTask가 완료 될 때 트리거 이벤트
시나리오는 다음과 같습니다.
Sqlite 데이터베이스에서 데이터를 읽고이 데이터를 어댑터에 전달 된 ArrayList에 넣은 다음 화면에 표시하는 작업이 있습니다.
질문 :
리스너 인터페이스를 값으로 업데이트하려고하면 내 앱이 다운됩니다. 그것은 logcat에 아무것도 보여주지 않습니다 ... 그것은 단지 응용 프로그램을 끊습니다. 누군가 내가 잘못 가고있는 부분을 친절하게 지적 할 수 있습니까? - 고마워요
Details :
DatbaseRoutines라는 클래스에 의해 데이터베이스 처리가 완료되었으며 내부에서 무거운 작업을 수행하고 있습니다. 이 메서드는 AsyncTask를 사용하여 주 스레드를 처리하지 않습니다.
나는 내가 그것을
public void setDbProcesslistener(DatabaseProcessListener dbProcesslistener) {
this.dbProcesslistener = dbProcesslistener;
}
에 대한 세터와 함께 전용 변수
private DatabaseProcessListener dbProcesslistener;
을 만드는 오전 내 DatabaseRoutines 클래스에서 하나의 방법
public interface DatabaseProcessListener {
public void ProcessingIsDone(boolean blnProcessIsFinished);
}
을 생성하고 인터페이스있다 처리가 끝나면 PostExecute 메서드를 사용하여 Listener를 업데이트합니다. True로 청취자의 값을 변경 (즉 DB가 처리되는 IE) 아래 코드를 내가 리스너를 구현 데이터베이스에서 수집 된 데이터를 표시하는 활동 마지막으로
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);
} ;
입니다. 아래를보십시오. 내가 로그 캣을 발견 뒷조사 후
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)
불행하게도 앱에 걸려있다 nullpointer 예외를 error..its 및 인터페이스는 결코 이루어집니다 사실 (즉, 처리와 데이터를 표시하는 활동을 갱신하지)
날 올바른 방향으로 나를 가리 킵니다. 감사합니다.
생각하려고 모든 사람에게
덕분에 당신의 AsyncTask를 요구되었다. – Anirudh
예. 나는 중단 점을 넣었고 청취자를 부르는 선에 얼어 붙었다. 고마워요 – KuriaNdungu