2013-05-26 9 views
2

나는에 실행됩니다 외부 콜백 함수를 전달하는 onPostExecute()에, 나는 doInBackground() 후 원하는 문제가있다 (AsyncTask 통해) 내 서버에 내 모든 API 호출을 관리하는 클래스를 개발했다 onPostExecute().안드로이드 익명 콜백 함수

이렇게하면 통신 클래스를 일반으로 유지할 수 있으며 Activity는 콜백을 보내 UI를 활성화하고 업데이트합니다.

어떻게 생각하나요?

감사합니다. ,

public class ApiMethods { 

public interface OnCommandFinished { 
    public void onApiSuccess(String result); 
    public void onApiError(String error); 
} 

public void like(PARAMS .... , OnCommandFinished respondTo){ 
    new runRequestTask(respondTo).execute(uri, params); 
} 

private class runRequestTask extends AsyncTask<Object, Void, String>{ 

    private final OnAtomicCommandFinished mRespondTo; 

    public runRequestTask(OnCommandFinished respondTo){ 
     mRespondTo = respondTo; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // IF SUCCESS 
     mRespondTo.onAtomicSuccess(result); 

     // IF ERROR 
     mRespondTo.onApiError("404...."); 
    } 
} 

}

코드를 실행하려면, 당신은 단순히 답이 허용됩니다 있지만이 OnCommandFinished

+1

http://stackoverflow.com/questions/16752073/how-do-i-return-a-boolean-from-asynctask/16752189#16752189. 블랙 벨트로 답을 확인하십시오. 비슷한 것을 찾고 있습니까? – Raghunandan

답변

2

당신은 동료 이동 실제 익명 구현. 이 도움이 다른 사람을 바랍니다.

인터페이스 : 이것을 AsyncTask 클래스에 구현할 수 있습니다.

public interface ImageLoaderListener{ 
    void imageDownloaderCallBack(Bitmap bmp); 
} 

AsyncTask를 클래스 생성자 :

// declare interface variable 
private ImageLoaderListener listener; 
private String link; 

public ImageDownloader(String link, ImageLoaderListener listener){ 
    this.link = link; 
    this.listener = listener; 
} 

onPostExecution : 작업 클래스의

@Override 
protected void onPostExecute(Void result){ 
    listener.imageDownloaderCallBack(bitmap); 
    // your code, i was returning bitmap 
} 

구현 :

ImageDownloader imageDownloader = new ImageDownloader(url, new ImageLoaderListener(){ 
    @Override 
    public void imageDownloaderCallBack(Bitmap bmp) { 
      // update Ui elements 
    } 
}); 
imageDownloader.execute(); 

또한 Ui 요소를 imageDownloaderCallBack 반환 값을 기반으로 업데이트해야하는 경우 해당 코드를 함수 자체에 작성해야합니다.

+0

'respondTo' 매개 변수에 대해'like (...) '로 무엇을 전달하겠습니까? –

+1

'respondTo'는 호출자 인 결과를 기대했던 인터페이스입니다. 호출자는 일부 매개 변수와 함께'like' 메소드를 호출하여이 작업을 시작했습니다. 이는 실제로 구현에 따라 다릅니다. – Sean

2

, 또 다른 추가 구현하는 클래스로 like(...) 전화 : 여기