如何将JSONArray转换为ListView?

我有一个代码,它遵循以下 –

  1. 通过HttpClient连接到Web服务到PHP文件
  2. 返回SQL查询的结果
  3. 返回格式是jArray(JSONArray)

for(int i=0; i < jArray.length() ; i++) { json_data = jArray.getJSONObject(i); int id=json_data.getInt("id"); String name=json_data.getString("name"); Log.d(name,"Output"); } 

当我查看LogCat时,我看到了查询的所有“名称”,每条记录都被打印出来。 我只需要将这些结果插入ListView。 我怎么能做到这一点?

PS – 我没有ArrayAdapter的单独类。 这可能是原因吗?

如果您只想显示textView的列表,则不需要覆盖任何内容,只需将所有项添加到arrayList中并使用arrayAdapter即可。

将列表视图放在名为android:list的xml中,然后使用要使用的textView创建arrayAdapter。

之后,你所要做的就是调用setListAdapter(mArrayAdapter),它应该填充你的列表。

 ArrayList items = new ArrayList(); for(int i=0; i < jArray.length() ; i++) { json_data = jArray.getJSONObject(i); int id=json_data.getInt("id"); String name=json_data.getString("name"); items.add(name); Log.d(name,"Output"); } ArrayAdapter mArrayAdapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, items)); setListAdapter(mArrayAdapter) 

希望这可以帮助!

你可以看看这个网页上有一个例子来做你正在寻找的东西: http : //p-xr.com/android-tutorial-how-to-parse-read-json-data-into-a -Android-的ListView /

基本上,在打印名称的for循环中,您应该加载一个数组列表,其中包含您希望稍后插入列表的值。 请注意,该示例使用以下内容:

ArrayList< HashMap < String, String > > mylist = new ArrayList < HashMap < String, String > > ();

并且您有一个整数和一个字符串要添加到结构中,因此您可以简单地将该ID转换为字符串并解决问题。 之后,您可以使用列表适配器,而无需创建单独的类:

ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, new String[] { "name", "id" }, new int[] { R.id.item_title, R.id.item_subtitle });

其中“name”和“id”将是地图中json和item_title返回的名称和id值的键,item_subtitle视图“适应”文本。

希望我足够清楚,看看这个例子无论如何它非常简单。

将数据放入Array并使用ArrayAdapter将数据绑定到列表项。

请参阅以下文章:

http://www.josecgomez.com/2010/05/03/android-putting-custom-objects-in-listview/

我不喜欢重新映射数据,而我已经将它们放在JSON数组中,所以这是我的代码…它对我来说很简单….希望它有帮助

 package ...; import android.content.Context; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class DataListFragment extends ListFragment{ JSONArray data; public DataListFragment(){ } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.i("mycode", "DataListFragment onActivityCreated"); data=((MainActivity)this.getActivity()).data; Log.i("mycode", "data length "+data.toString()); setEmptyText("No Data Here"); final JSONArrayAdapter adapter = new JSONArrayAdapter(this.getActivity(),data); setListAdapter(adapter); // Start out with a progress indicator. //setListShown(false); } @Override public void onListItemClick(ListView l, View v, int position, long id) { // Insert desired behavior here. Log.i("mycode", "Item clicked: " + id); } private class JSONArrayAdapter extends BaseAdapter { JSONArray data; Context context; public JSONArrayAdapter(Context context,JSONArray data) { super(); this.context=context; this.data=data; } @Override public int getCount() { return data.length(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub try { return data.getJSONObject(arg0); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override public long getItemId(int arg0) { return arg0; } @Override public boolean hasStableIds(){ return true; } @Override public boolean isEmpty(){ return data==null || data.length()==0; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.single_item, parent, false); TextView textView1 = (TextView) rowView.findViewById(R.id.firstLine); TextView textView2 = (TextView) rowView.findViewById(R.id.secondLine); //ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); try { JSONObject jo = (JSONObject) data.get(position); textView1.setText(jo.getString("category_title")); textView2.setText(jo.getString("description")); } catch (JSONException e) { e.printStackTrace(); } return rowView; } } }