我正在使用3个Asynctasks并行尝试在线调用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 );
}}
答案 0 :(得分:0)
因为您将所有textview id都视为相同。拿不同的身份然后尝试.. android:id =“@ + id / uid”...尝试为所有textViews更改它
答案 1 :(得分:0)
在所有三个班级JSONParse
,JSONParse1
和JSONParse2
中,您发现TextView
来自(TextView)findViewById(R.id.uid);
其次您正在使用value
变量所有三个类都在你的mainActivity
类中明确声明,因为它没有在3个类中任何一个声明。