2014-09-30 35 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 
     } 
    });