2013-10-27 2 views
0

asynctask를 분리하여 클래스를 분리했지만 결과가 다시 전달 될 때 오류가 발생했습니다. 콜백 기능을 사용하기 위해 인터페이스를 사용하여 수행하도록 노력하고 있습니다. 오류가 어디 있는지 말해 줄 수 있습니까? (line 40 is callback.onDeleteAdd(result); )asynctask의 결과를 다시 전달할 수 없습니다.

인터페이스

public interface DeleteAddInterface { 
    public void onDeleteAdd(JSONObject result); 
} 

AsyncTask를

public class DeleteAdd extends AsyncTask<Advert, Void, JSONObject> { 
    private DeleteAddInterface callback; 
    private int atempt = 0; 
    private Advert advert; 

    public DeleteAdd(int atempt) { 
     this.atempt = atempt; 
    } 

    public DeleteAdd() { 

    } 

    @Override 
    protected JSONObject doInBackground(Advert... advert) { 
     this.advert = advert[0]; 
     if (atempt < 5) { 
      UserFunctions u = new UserFunctions(); 
      return u.getNewAdd(advert[0].getId()); 
     } else 
      return null; 
    } 

    @Override 
    protected void onPostExecute(JSONObject result) { 
     super.onPostExecute(result); 
     if (result == null) { 
      DeleteAdd add = new DeleteAdd(atempt + 1); 
      add.execute(advert); 
     } else { 
      callback.onDeleteAdd(result); 
     } 
    } 

} 

활성

public class AddToCheckActivity extends ErrorActivity implements DeleteAddInterface{ 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
       DeleteAdd dAdd = new DeleteAdd(); 
     dAdd.execute(adv); 

@Override 
    public void onDeleteAdd(JSONObject result) { 
     Intent i = new Intent(getApplicationContext(), 
       MyAddPrepareActivity.class); 
     startActivity(i); 
     finish(); 

    } 
} 

오류

10-27 02:16:26.322: E/AndroidRuntime(12664): FATAL EXCEPTION: main 
10-27 02:16:26.322: E/AndroidRuntime(12664): java.lang.NullPointerException 
10-27 02:16:26.322: E/AndroidRuntime(12664): at networkOperations.DeleteAdd.onPostExecute(DeleteAdd.java:40) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at networkOperations.DeleteAdd.onPostExecute(DeleteAdd.java:1) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at android.os.AsyncTask.finish(AsyncTask.java:631) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at android.os.Looper.loop(Looper.java:158) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at android.app.ActivityThread.main(ActivityThread.java:5751) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at java.lang.reflect.Method.invokeNative(Native Method) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at java.lang.reflect.Method.invoke(Method.java:511) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850) 
10-27 02:16:26.322: E/AndroidRuntime(12664): at dalvik.system.NativeStart.main(Native Method) 

답변

1

리스너 (사용자 활동)의 구현을 AsynchTask에 전달해야합니다.

은 다음과 같이 생성자를 변경

:

public DeleteAdd(DeleteAddInterface callback) { 
    this.callBack = callback; 
} 

과 활동에 :

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
      DeleteAdd dAdd = new DeleteAdd(this); 
    dAdd.execute(adv); 

환호

관련 문제