如何在android中实现块

时间:2014-09-30 08:03:08

标签: android ios android-asynctask block

In IOS we use blocks when we want to handle an action when a particular situation occur

在android中有没有这样的方法来处理 onCompletion 的情况,我们可以添加它的位置。

AsyncTask方法类似,它知道工作何时完成。它执行onPostExecute。当特定情况到达时我们如何创建这种类型的方法,我们就像处理它一样。

今天我找到了一种像IOS中的Block一样的方式

BaseAsyncTask(new Callback(){

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

它是一个委托,它在达到特定情况时调用..

我是正确的,上面的代码是阻止在Android ,就像在IOS中一样。或者在android中有任何其他创建块的方法。

2 个答案:

答案 0 :(得分:9)

表现得像iOS Block:

一个。比方说,在你的班级 APISingleton (例如单例类中的Volley request-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");  
    }
    
  3. 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
            }
        });
    

答案 1 :(得分:2)

您的问题似乎有两个问题,所以我会回答它们

  

在android中有没有这样的方法来处理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一样使用它。