Java 并行运行多个异步任务时显示相同的值
我正在尝试使用3个异步任务并行调用3个JSON apiJava 并行运行多个异步任务时显示相同的值,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
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就解决了。。。。