Joakin60
04/06/16, 12:35:49
Cuando paso un solo String en una clase AsyncTask no tengo problemas:
protected String doInBackground(String... args) {
HashMap<String, String> params = new HashMap<String, String>();
params.put(TAG_PID, pidArte);
JSONObject json = jsonParser.makeHttpRequest(url_arte,
"POST", params);
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
apartados = json.getJSONArray(TAG_APARTADOS);
for (int m = 0; m < apartados.length(); m++) {
JSONObject c = apartados.getJSONObject(m);
// Poner cada json item en una variable
String nombre = c.getString(TAG_NOMBRE);
return nombre;
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String nombre) {
pDialog.dismiss();
delegate.processFinish(nombre);
}
Pero cuando tengo que pasar varios string utilizo el siguiente código que fundamentalmente consiste en poner los string obtenidos de json en un HashMap<String, String> map, pasar el HashMap a onPostExecute y allí recuperar los valores de los string por su clave:
class ArteGeneralDetails extends AsyncTask<String, String, HashMap<String, String>> {
…
protected void onPreExecute() {
…
protected HashMap<String, String> doInBackground(String... args) {
HashMap<String, String> map = new HashMap<String, String>();
HashMap<String, String> params = new HashMap<String, String>();
params.put(TAG_PID, pidArte);
JSONObject json = jsonParser.makeHttpRequest(url_arte,
"POST", params);
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
apartados = json.getJSONArray(TAG_APARTADOS);
for (int m = 0; m < apartados.length(); m++) {
JSONObject c = apartados.getJSONObject(m);
// Poner cada json item en una variable
String nombre = c.getString(TAG_NOMBRE_ARTE);
String icono2 = c.getString(TAG_IMAGEN_ARTE);
map.put(TAG_NOMBRE_ARTE, nombre);
map.put(TAG_IMAGEN_ARTE, icono2);
//return map;
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return map;
}
protected void onPostExecute(HashMap<String, String> resultados) {
pDialog.dismiss();
String nombre=resultados.get(TAG_NOMBRE_ARTE);
Toast.makeText(getApplicationContext(), nombre, Toast.LENGTH_LONG).show();
}
En el Toast no sale valor alguno para nombre.
Si alguien puede indicarme algo sobre cómo solucionarlo se lo agradecería.
protected String doInBackground(String... args) {
HashMap<String, String> params = new HashMap<String, String>();
params.put(TAG_PID, pidArte);
JSONObject json = jsonParser.makeHttpRequest(url_arte,
"POST", params);
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
apartados = json.getJSONArray(TAG_APARTADOS);
for (int m = 0; m < apartados.length(); m++) {
JSONObject c = apartados.getJSONObject(m);
// Poner cada json item en una variable
String nombre = c.getString(TAG_NOMBRE);
return nombre;
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String nombre) {
pDialog.dismiss();
delegate.processFinish(nombre);
}
Pero cuando tengo que pasar varios string utilizo el siguiente código que fundamentalmente consiste en poner los string obtenidos de json en un HashMap<String, String> map, pasar el HashMap a onPostExecute y allí recuperar los valores de los string por su clave:
class ArteGeneralDetails extends AsyncTask<String, String, HashMap<String, String>> {
…
protected void onPreExecute() {
…
protected HashMap<String, String> doInBackground(String... args) {
HashMap<String, String> map = new HashMap<String, String>();
HashMap<String, String> params = new HashMap<String, String>();
params.put(TAG_PID, pidArte);
JSONObject json = jsonParser.makeHttpRequest(url_arte,
"POST", params);
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
apartados = json.getJSONArray(TAG_APARTADOS);
for (int m = 0; m < apartados.length(); m++) {
JSONObject c = apartados.getJSONObject(m);
// Poner cada json item en una variable
String nombre = c.getString(TAG_NOMBRE_ARTE);
String icono2 = c.getString(TAG_IMAGEN_ARTE);
map.put(TAG_NOMBRE_ARTE, nombre);
map.put(TAG_IMAGEN_ARTE, icono2);
//return map;
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return map;
}
protected void onPostExecute(HashMap<String, String> resultados) {
pDialog.dismiss();
String nombre=resultados.get(TAG_NOMBRE_ARTE);
Toast.makeText(getApplicationContext(), nombre, Toast.LENGTH_LONG).show();
}
En el Toast no sale valor alguno para nombre.
Si alguien puede indicarme algo sobre cómo solucionarlo se lo agradecería.