2014-09-30 67 views
1

In IOS we use blocks when we want to handle an action when a particular situation occur如何在android中實現塊

有沒有像這樣的android的方式來處理情況onCompletion,我們可以添加到任何地方。

Like AsyncTask方法它知道工作何時完成。它執行onPostExecute。當特定情況到達並且我們處理它時,我們如何創建這種類型的方法。

今天,我發現它表現得像塊在IOS

BaseAsyncTask(new Callback(){ 

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

這是一個委託的方式,當它到達特定情況下它會調用..

我說得對不對,上面的代碼與我們在IOS中所做的一樣,在android中的塊爲。或者有任何其他方式在android中創建塊。

+0

我的回答不正確?請提供反饋意見,以便我知道如何改進我的答案以回答您的問題。 – Keale 2014-10-15 02:21:18

回答

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 
    } 
}); 

我說得對不對,上面的代碼是在Android的塊如我們在IOS做。或者有任何其他方式在android中創建塊。

在我看來,對象Callback的行爲與Objective C中的塊相同,正如我在前面的示例中所示。異步任務完成後(結果已經可用),則調用該回調。也許像這樣:

callback.onPostResult(); 

只是爲了您的信息,對象RunnableCallbackjava interfaces。更多關於接口here。如果您不需要額外的回調參數,則可以使用Runnable以避免重新發明車輪。但是,如果有一些特殊的東西,即您想要將參數傳遞給回調函數,那麼您可以創建自己的接口並使用它,如Runnable

+0

你的回答對我的知識是正確的.. – Nepster 2014-10-15 06:56:55

+0

很高興能夠幫助:) – Keale 2014-10-15 07:05:22

9

行爲類似於iOS的塊:

A.讓說,在你的類APISingleton(E。克凌空請求-API在單例類):

  1. 定義接口類的外部:

    // Callback Blueprint 
    interface APICallback { 
        void onResponse(User user, boolean success, String message); // Params are self-defined and added to suit your needs. 
    } 
    
  2. 在您的API請求功能

    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 
     } 
    });