Java 并行运行多个异步任务时显示相同的值

Java 并行运行多个异步任务时显示相同的值,java,android,json,multithreading,android-asynctask,Java,Android,Json,Multithreading,Android Asynctask,我正在尝试使用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中,Async

我正在尝试使用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被假定为并行运行,因为我正在调用 我的异步任务类JSONParse、JSONParse1、JSONPArse2的executeOnExecutor(AsyncTask.THREAD\u POOL\u EXECUTOR)方法,因为我需要同时从3个不同URL检索3个变量的值

但是,在所有三个文本视图中只设置了第三个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 );
                        }  
  }
   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 );
                        }  
  }
私有类JSONParse扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
uid=(TextView)findViewById(R.id.uid);
}
@凌驾
受保护的JSONObject doInBackground(字符串…args){
JSONParser jParser=新的JSONParser();
json1=jParser.getJSONFromUrl(url1);
返回json1;
}
@凌驾
受保护的void onPostExecute(JSONObject json1){
字符串jsonString=json1.getString(“示例”);
uid.setText(jsonString);
}  
}
JSONParse1和JSONParse2也是如此

我的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 );
                        }  
  }
   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 );
                        }  
  }
私有类JSONParse1扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
name=(TextView)findViewById(R.id.name);
}
@凌驾
受保护的JSONObject doInBackground(字符串…args){
JSONParser jParser=新的JSONParser();
json2=jParser.getJSONFromUrl(url3);
返回json2;
}
@凌驾
受保护的void onPostExecute(JSONObject json1){
字符串jsonString=json2.getString(“示例”);
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 );
     }}
私有类JSONParse2扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
value=(TextView)findViewById(R.id.value);
}
@凌驾
受保护的JSONObject doInBackground(字符串…args){
JSONParser jParser=新的JSONParser();
json3=jParser.getJSONFromUrl(url3);
返回json3;
}
@凌驾
受保护的void onPostExecute(JSONObject json3){
字符串jsonString=json3.getString(“示例”);
value.setText(jsonString);
}}

因为您使用了相同的所有textview ID。取不同的身份证,然后再试。。
android:id=“@+id/uid”…尝试在所有三个类中的所有文本视图中更改它,
JSONParse
JSONParse1
JSONParse2
您从
(TextView)findViewById(R.id.uid)中找到的
TextView
其次,您在所有三个类中使用
value
变量,这在
mainActivity
类中明确声明,因为这三个类中没有任何一个声明。

我也面临同样的问题。。但是现在,只要更改ID,ii就解决了。。。。