[英]Android CONVERT JSONARRAY TO ARRAYLIST
我有AsyncConector類來解析JSON信息,在doInBackground方法中,我已經獲得了有關JSON數據的正確信息...
[{"suc_nombre":"Cuautitlán","cli_nombre":"Futcho 7"}]
那么如何將這些信息放入標准適配器中? ....
lvAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
在doInBackground方法中,我有此代碼,但不起作用
data = new JSONToStringCollection(obj).getArrayList();
完整的課..
public class AsyncConector extends AsyncTask<Void, Void, Void> {
private ArrayList<String> data;
private ArrayAdapter<String> adapter;
private String url;
private String tag; //// JSON Node names
private ProgressDialog pd;
private Context context;
List<NameValuePair> parametros;
// data JSONArray
JSONArray ljsonArray = null;
public AsyncConector(Context context, ArrayAdapter<String> adapter,
String url, List<NameValuePair> params, String tag) {
this.adapter = adapter;
this.url = url;
pd = new ProgressDialog(context);
this.context = context;
this.parametros = params;
this.tag = tag;
}
@Override
protected void onPreExecute() {
// Configuramos el ProgressDialog para mostrar mensaje de que se está
// cargando el contenido.
pd.setIndeterminate(true);
pd.setMessage(context.getResources().getString(R.string.MessageProgressDialog));
pd.setTitle(R.string.TitleProgressDialog);
// Mostramos el ProgressDialog.
pd.show();
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
// Creamos un objeto de la clase que se encargará de conectar a la URL y analizar su contenido.
ConectorHttpJSON conector = new ConectorHttpJSON(url, parametros);
try {
// Recogemos el documento JSON de Internet.
JSONObject obj = conector.execute();
// Getting JSON Array node
ljsonArray = obj.getJSONArray(tag);
// Analizamos el documento JSON y recogemos todos los datos
data = new JSONToStringCollection(obj).getArrayList();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// Añadimos todos los links al Adapter.
for (String tmp : data)
adapter.add(tmp);
// Indicamos al Adapter que ha cambiado su contenido, para que actualice
// a su vez los datos mostrados en el ListView.
adapter.notifyDataSetChanged();
// Eliminamos el ProgressDialog.
pd.dismiss();
super.onPostExecute(result);
}
}
數據類別
// Creamos un Adapter estándar de Android.
lvAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, new ArrayList<String>());
// Actualizamos los datos, pasamos el Context para poder mostrar un
// ProgressDialog durante la carga de datos y el Adapter para
// actualizarlo, url y parametros
((BDApplication) getApplication()).getData(this, lvAdapter, url, params, tag);
我將介紹一種將有助於大型應用程序的方法。
在您的項目中創建一個包含所有JSON解析器的包。
從主線程(活動)調用AsyncTask
new AsyncConector().execute( /* Whatever parameters you want */);
調用解析器:
@Override
protected void onPostExecute(Void result) {
ArrayList<Car> cars = new CarParser(jsonString).getBeans();
// add values to your adapter and notify dataset changed. add objects to the adapter
// loop is fine.
}
資料類別:
public class Car {
private String suc_nombre;
private String cli_nombre;
public String getSuc_nombre() {
return suc_nombre;
}
public void setSuc_nombre(String suc_nombre) {
this.suc_nombre = suc_nombre;
}
public String getCli_nombre() {
return cli_nombre;
}
public void setCli_nombre(String cli_nombre) {
this.cli_nombre = cli_nombre;
}
}
樣本解析類文件:
public class CarParser {
private ArrayList<Car> beans = new ArrayList<Car>();
public CarParser(String json) {
try {
JSONArray array = new JSONArray(json);
for (int i=0;i<array.length();i++) {
JSONObject object = array.getJSONObject(i);
Car car = new Car();
car.setSuc_nombre(object.getString("suc_nombre"));
car.setCli_nombre(object.getString("cli_nombre"));
beans.add(car);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public String toString() {
String beansString = "";
for (int i=0;i<getBeans().size();i++) {
beansString += "\n-------\n" + getBeans().get(i).toString();
}
return "CarParser [beans=" + beansString + "]";
}
public ArrayList<Car> getBeans() {
return beans;
}
public void setBeans(ArrayList<Car> beans) {
this.beans = beans;
}
}
如果僅將JSONArray
轉換為ArrayList
以便與ArrayAdapter
一起使用,也許我可以推薦另一種方法。 只需使用直接支持JSONArrays
的適配器即可。 Advanced-Adapters庫支持此類適配器。
就像ArrayAdapter
一樣,除了它是用JSONArray
而不是ArrayList
構造的。 但是,與ArrayAdapter
不同,它需要您在getView()
方法中編寫視圖創建邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.