Estoy trabajando en un proyecto de cliente-servidor en Android. Necesito analizar JSON desde una URL determinada y colocarlo en un ExpandableListView
. En la respuesta JSON obtengo datos con nodos que contienen matrices. Por lo tanto, tengo que colocar el principal JsonArray
en Grupos en ExpandableListView
. Funciona bien.¿Cómo crear dinámicamente grupos y elementos secundarios en la vista de lista expandible desde json en android?
puedo averiguar cuántos grupos están llegando desde el JSON, pero el problema surge cuando estoy tratando de colocar niño dentro de cada grupo sobre la base de los datos procedentes del servidor. Mi código solo coloca al primer hijo dentro del primer grupo, pero cuando hago clic en el segundo hijo, muestra un error.
tengo que colocar "ID" y "nombre de usuario" dentro respectivo grupo (por ejemplo: correo electrónico, fax, cargados). Mi código puede colocar información de un niño dentro de un grupo, pero cuando hago clic en el segundo grupo, se bloquea. Cualquier tipo de ayuda será muy apreciada.
Por lo tanto, mi pregunta es, ¿cómo puedo crear dinámicamente grupos y colocar datos secundarios dentro de cada elemento secundario en función de los datos del servidor?
Aquí es el error en el registro de:
04-07 17:49:02.194: E/AndroidRuntime(13285): FATAL EXCEPTION: main
04-07 17:49:02.194: E/AndroidRuntime(13285): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
04-07 17:49:02.194: E/AndroidRuntime(13285): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
04-07 17:49:02.194: E/AndroidRuntime(13285): at java.util.ArrayList.get(ArrayList.java:304)
04-07 17:49:02.194: E/AndroidRuntime(13285): at android.widget.SimpleExpandableListAdapter.getChildrenCount(SimpleExpandableListAdapter.java:255)
04-07 17:49:02.194: E/AndroidRuntime(13285): at android.widget.ExpandableListConnector.refreshExpGroupMetadataList(ExpandableListConnector.java:561)
04-07 17:49:02.194: E/AndroidRuntime(13285): at android.widget.ExpandableListConnector.expandGroup(ExpandableListConnector.java:682)
04-07 17:49:02.194: E/AndroidRuntime(13285): at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:561)
04-07 17:49:02.194: E/AndroidRuntime(13285): at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:521)
04-07 17:49:02.194: E/AndroidRuntime(13285): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)
04-07 17:49:02.194: E/AndroidRuntime(13285): at android.widget.AbsListView$1.run(AbsListView.java:3168)
04-07 17:49:02.194: E/AndroidRuntime(13285): at android.os.Handler.handleCallback(Handler.java:605)
04-07 17:49:02.194: E/AndroidRuntime(13285): at android.os.Handler.dispatchMessage(Handler.java:92)
04-07 17:49:02.194: E/AndroidRuntime(13285): at android.os.Looper.loop(Looper.java:137)
04-07 17:49:02.194: E/AndroidRuntime(13285): at android.app.ActivityThread.main(ActivityThread.java:4424)
04-07 17:49:02.194: E/AndroidRuntime(13285): at java.lang.reflect.Method.invokeNative(Native Method)
04-07 17:49:02.194: E/AndroidRuntime(13285): at java.lang.reflect.Method.invoke(Method.java:511)
JSON response
{ "email":[
{"ID":"123","username":"dipakadmin"},
{"ID":"3233","username":"raju"},
{"ID":"5445","username":"hussain"}
]
,
"fax":[
{"ID":"6665","username":"mohammad"},
{"ID":"9877","username":"raj"},
{"ID":"87655","username":"aryan"}
]
,
"upload":
[
{"ID":"132322","username":"raja"},
{"ID":"544333","username":"bala"},
]
}
Esto es sólo un ejemplo de respuesta JSON. Las respuestas reales tienen muchas etiquetas.
Ejemplo de código para ExpandableListActivity es el siguiente:
package com.ExpandableListActivity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView;
public class DocumentCenter extends ExpandableListActivity {
public static JSONObject jsonDocu=null;
JSONArray jArray = null;
JSONObject json_data = null;
JSONObject root = null;
List<List<Map<String, String>>> childs;
List<Map<String, String>> child1;
List<Map<String, String>> child2;
List<Map<String, String>> child3;
SimpleExpandableListAdapter adapter;
Map<String, String> childdata1;
public static String url3=null;
String strEmailNull=null;
String strFaxNull=null;
String strUploadNull=null;
public String user=null;
TextView txtMLSID;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
user= TabBarExample.getJsonUser;
Log.e("log_tag","USERNAME On Document : "+user);
List<Map<String, String>> groups = new ArrayList<Map<String, String>>();
child1 = new ArrayList<Map<String, String>>();
child2 = new ArrayList<Map<String, String>>();
child3 = new ArrayList<Map<String, String>>();
url3 ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
Log.e("log_tag","URL on DOCUMENT : "+url3);
try {
jsonDocu = JSONfunctions1.getJSONfromURL(url3);
JSONArray ary = jsonDocu.names();
Log.e("log_tag","ary : "+ary .toString());
for (int i1 = 0; i1 < ary.length(); i1++) {
String value = ary.get(i1).toString();
Log.e("log_tag","value : "+value);
strEmailNull= jsonDocu.getString(value);
if (!strEmailNull.equals("null")){
try{
Map<String, String> group1 = new HashMap<String, String>();
group1.put("group", value);
//group1.put("group", value+(i1+1));
groups.add(group1);
JSONArray email = jsonDocu.getJSONArray(value);
for(int i=0;i<email.length() ;i++){
childdata1 = new HashMap<String, String>();
JSONObject e = email.getJSONObject(i+1);
childdata1.put("child", e.getString("ID"));
childdata1.put("child1", "Name: "+e.getString("name"));
childdata1.put("child2", "Size: "+e.getString("size"));
childdata1.put("child3", "Update: "+e.getString("lastUpdate"));
child1.add(childdata1);
childs = new ArrayList<List<Map<String, String>>>();
}
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
}
}
childs.add(child1);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
adapter = new SimpleExpandableListAdapter(
this, groups, R.layout.groups2, new String[] { "group" },
new int[] { R.id.group }, childs, R.layout.childs2,
new String[] { "child1","child2" ,"child3"}, new int[] { R.id.child1, R.id.child2, R.id.child3});
setListAdapter(adapter);
}
@Override
public boolean setSelectedChild(int groupPosition, int childPosition,
boolean shouldExpandGroup) {
//do something
Log.e("log_tag","setSelectedChild: ");
return super.setSelectedChild(groupPosition, childPosition,
shouldExpandGroup);
}
@Override
public void setSelectedGroup(int groupPosition) {
//do something
Log.e("log_tag","setSelectedGroup: ");
super.setSelectedGroup(groupPosition);
}
}
se tengo alguna solución por favor bríndame – Harsha