在Async Task中使用bundle,android

时间:2015-05-14 20:47:16

标签: android

如何通过AsyncTask doInBackground()方法从包中获取值,包括URL和字符串?

活动:

Bundle bundle = new Bundle();
bundle.putString("url", url);
bundle.putString("json",asyn.toString());
inte.putExtras(bundle);
JSONObject ResponseFromServer = asyn.execute(bundle);

并且在AsyncTask我仍然无法提取值。

2 个答案:

答案 0 :(得分:0)

我会在AsyncTask中创建一个接口,然后由调用它的对象实现。 AsyncTask完成后,它可以调用由调用对象实现的接口。这样您就可以传回JSON响应。

修改 Here's关于SO的完整示例,其中包含有关如何执行此操作的代码段。

另一个编辑: 要将包传递给AsyncTask,您可以实现以下内容:

public class YourAsyncTask extends AsyncTask<Object, Void, Void> {
    @Override
    protected Void doInBackground(Object... params)
    {
        Bundle dataForPost = (Bundle)params[0];
        String url = dataForPost.getString("url");
        String jsonString = dataForPost.getObject("json");
        /*
            your http post code here
        */
    }
}

答案 1 :(得分:0)

这里确实没有必要使用Bundle,你可以将字符串传递给varargs所需的doInBackground()

你可以像这样调用它,其中json是一个JSONObject:

 asyn.execute(url, json.toString());

然后,您可以doInBackground()取字符串varargs

class Asyn extends AsyncTask<String, Void, Void> {
    @Override
    protected Void doInBackground(String... arg0) {
        String url = arg0[0];
        String json = arg0[1];
        JSONObject obj = new JSONObject(json);
    }   
}

如果您真的想使用Bundle,可以像现在一样调用它:

Bundle bundle = new Bundle();
bundle.putString("url", url);
bundle.putString("json",json.toString());
//inte.putExtras(bundle); //not needed
asyn.execute(bundle);

然后将doInBackground()带到Bundle varargs

class Asyn extends AsyncTask<Bundle, Void, Void> {
    @Override
    protected Void doInBackground(Bundle... arg0) {
        Bundle b = arg0[0];
        String url = b.getString("url");
        String json = b.getString("json");
        JSONObject obj = new JSONObject(json);
    }   
}

此外,您不应该尝试从AsyncTask捕获返回值。如果AsyncTask是Activity的子类,那么您可以在onPostExecute()中设置值,并在封闭的Activity中调用方法。

有关其他方法,see this post