【发布时间】:2013-11-22 12:57:14
【问题描述】:
我正在尝试使用 3 个异步任务并行调用 3 个 JSON api。
private static String url1 = "http://example.com:8080/firstJson";
private static String url2 = "http://example.com:8080/secondJson";
private static String url3 = "http://example.com:8080/thirdJson";
在我的 mainActivity 中,假定 AsyncTask 是并行运行的,因为我正在调用 我的 AsyncTask 类 JSONParse、JSONParse1、JSONPArse2 的 executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) 方法,因为我需要同时从 3 个不同的 URL 检索 3 个变量的值。
但是,在所有三个 TextView 中只设置了第三个 url 的值,其余的值要么被覆盖、丢弃或忽略。
请指导我如何同时运行这三个 API 调用并显示正确的结果。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Btngetdata = (Button)findViewById(R.id.getdata);
Btngetdata.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {
new JSONParse().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Log.d(LOG_TAG,"JSONParse() ");
new JSONParse1().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Log.d(LOG_TAG,"JSONParse1() ");
new JSONParse2().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Log.d(LOG_TAG,"JSONParse1() ");
} else {
Log.d(LOG_TAG,"ELSE Inside thread");
new JSONParse().execute();
}
}}); }
我的AsyncTask类JSONParse如下:
private class JSONParse extends AsyncTask<String, String, JSONObject> {
@Override
protected void onPreExecute() {
super.onPreExecute();
uid = (TextView)findViewById(R.id.uid);
}
@Override
protected JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
json1 = jParser.getJSONFromUrl(url1);
return json1;
}
@Override
protected void onPostExecute(JSONObject json1) {
String jsonString = json1.getString("Sample");
uid.setText(jsonString );
}
}
JSONParse1 和 JSONParse2 也是如此。
我的AsyncTask类JSONParse如下:
private class JSONParse1 extends AsyncTask<String, String, JSONObject> {
@Override
protected void onPreExecute() {
super.onPreExecute();
name= (TextView)findViewById(R.id.name);
}
@Override
protected JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
json2 = jParser.getJSONFromUrl(url3);
return json2;
}
@Override
protected void onPostExecute(JSONObject json1) {
String jsonString = json2.getString("Sample");
name.setText(jsonString );
}
}
这是我的 JSONParse2
private class JSONParse2 extends AsyncTask<String, String, JSONObject> {
@Override
protected void onPreExecute() {
super.onPreExecute();
value= (TextView)findViewById(R.id.value);
}
@Override
protected JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
json3 = jParser.getJSONFromUrl(url3);
return json3;
}
@Override
protected void onPostExecute(JSONObject json3) {
String jsonString = json3.getString("Sample");
value.setText(jsonString );
}}
【问题讨论】:
标签: java android json multithreading android-asynctask