如何通过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
我仍然无法提取值。
答案 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。