Toast显示了大约2次,而Json正在返回精美的6个物体。
如果它的问题是RunOnUiThread(我知道它不适合在asyntask中使用)或者其他问题,请
我可以使用其他方式为我的变量“mensaje”每次放入一个字符串,我可以显示Toat,也许在OnPostExecute中。
class asyncMensaje extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String user = params[0];
ArrayList<NameValuePair> envioDato = new ArrayList<NameValuePair>();
envioDato.add(new BasicNameValuePair("rut", user));
JSONArray jdata2 = post.getserverdata(envioDato, URL_connectFechas);
if (jdata2 != null && jdata2.length() > 0) {
JSONObject json_data; // creamos un objeto JSON
for (int i = 0; i < jdata2.length(); i++) {
try {
json_data = jdata2.getJSONObject(i);
mensaje = json_data.getString("mensaje");
Log.e("Info: ", "" + mensaje);
} catch (JSONException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), mensaje, Toast.LENGTH_LONG).show();
}
});
}
}
return null;
}
protected void onPostExecute(String result) {
}
}
答案 0 :(得分:1)
在您的情况下,理想的解决方案是将onProgressUpdate
与Toast
的排序结合使用。执行后者请参考this answer。
class asyncMensaje extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
//....
for (int i = 0; i < jdata2.length(); i++) {
//..
publishProgress(mensaje);
}
}
@Override
protected void onProgressUpdate(String... progress) {
//code for showing Toast
}
}
答案 1 :(得分:0)
使用onPostExecute
方法从doInBackground
中的webservice获取数据,而不是在不同Thread上运行的doInBackground中使用runOnUiThread
。这样做:
@Override
protected String doInBackground(String... params) {
String user = params[0];
ArrayList<NameValuePair> envioDato = new ArrayList<NameValuePair>();
envioDato.add(new BasicNameValuePair("rut", user));
JSONArray jdata2 = post.getserverdata(envioDato, URL_connectFechas);
return jdata2.toString();
}
@Override
protected void onPostExecute(String result) {
JSONArray jdata2=new JSONArray(result);
// parse JSONArray here and show Toast...
}