2014-09-30 3 views
1

In IOS we use blocks when we want to handle an action when a particular situation occur.android에서 블록을 구현하는 방법

상황이 인 경우 완료하려면을 처리해야합니다. 우리는 어디에 있든 추가 할 수 있습니다.

마찬가지로 비동기 작업 방법 작업이 완료되면 알 수 있습니다. 그것은 onPostExecute를 실행합니다. 특정 상황에 도달했을 때 이러한 유형의 메소드를 생성하고이를 처리 할 수있는 방법.

오늘

내가 잘한다는 건가요 .. 내가 그것을 대리자입니다

BaseAsyncTask(new Callback(){ 

onPostResult(string result) 
{ 
// do whatever you want to do with the result got from asynctaks 
} 
}); 

IOS에 블록처럼 행동 방법을 찾아야하고 특정 상황에 도달 할 때 호출 위의 코드 우리가 IOS에서와 같이 안드로이드에 블록입니다. 또는 안드로이드에서 블록을 만드는 다른 방법이 있습니다.

+0

내 대답이 잘못 되었습니까? 귀하의 질문에 대한 답변을 향상시키는 방법을 알 수 있도록 의견을 제공하십시오. – Keale

답변

2

당신이 당신의 질문에 두 가지 질문 그래서이 방법은 상황 onCompletion을 처리하기 위해 안드로이드에서 다음과 같이 거기에 그들에게 모두

대답하고는 이제까지 어디 우리가 추가 할 수있을 것 같다? 특정 상황에 도달했을 때 이러한 유형의 방법을 어떻게 만들 수 있습니까?

예, 방법이 있습니다. 나는 한번 여기 asked 같은 것을 가지고있다.

이 경우 Runnable을 사용합니다. 당신은 너무처럼 사용

//creating a runnable block 
Runnable block = new Runnable() { 
    @Override 
    public void run() { 
     //code here 
    } 
}; 

//passing it on arguments 
doSomething(block); //just like a normal variable 

//using it on the method 
public void doSomething(Runnable block) { 
    block.run(); 
} 

당신의 두번째 질문 :

BaseAsyncTask(new Callback(){ 

    onPostResult(string result) 
    { 
     // do whatever you want to do with the result got from asynctaks 
    } 
}); 

가 있습니까 나는 우리가 IOS에서와 위의 코드는 안드로이드에 블록이 바로 것이다. 또는 안드로이드에서 블록을 만드는 다른 방법이 있습니다.

예, 제 생각에 객체 Callback은 앞의 예제에서 보았 듯이 Objective C의 블록과 동일하게 동작합니다. 비동기 작업이 완료되면 (결과가 이미 사용 가능할 때) 해당 콜백이 호출됩니다. 아마과 같이 : 그냥 당신의 정보를

callback.onPostResult(); 

, 객체 RunnableCallbackjava interfaces이다. 인터페이스 here에 대한 자세한 정보. 콜백에 대한 추가 매개 변수가 필요하지 않은 경우 휠을 다시 작성하지 않도록 Runnable을 사용할 수 있습니다. 그러나 특별한 것이있는 경우, 즉 매개 변수를 콜백에 전달하려는 경우 사용자 고유의 인터페이스를 만들고 Runnable처럼 사용할 수 있습니다. 아이폰 OS 블록 같은

+0

당신의 대답은 내 지식에 맞습니다. – Nepster

+0

기꺼이 도와 드릴 수 있습니다 :) – Keale

9

행동하라 :

A.이 클래스 APISingleton (예에서, 가정 해 봅시다.g 발리 요청-API 싱글 톤 클래스) :

  1. 는 클래스 외부 인터페이스를 정의하여 API 요청 기능에서

    // Callback Blueprint 
    interface APICallback { 
        void onResponse(User user, boolean success, String message); // Params are self-defined and added to suit your needs. 
    } 
    
  2. public void requestAPIWithURL:(String url, final APICallback callback) { 
        // .... 
        // After you receive your volley response, 
        // Parse the JSON into your model, e.g User model. 
        callback.onResponse(user, true, "aloha"); 
    } 
    

B. 따라서 API 요청을 호출하고 액티비티 또는 프래그먼트에서 콜백 함수를 전달하는 방법은 다음과 같습니다.

APISingleton.getInstance().requestAPIWithURL("http://yourApiUrl.com", new APICallback() { 
     @Override 
     public void onResponse(User user, boolean success, String message) { 
      // you will get your user model, true, and "aloha" here 
      mUser = user; 
      Log.v(TAG, "success:" + success); 
      Log.v(TAG, "aloha or die?" + message); 

      // Your adapter work. :D 
     } 
    }); 
관련 문제