【发布时间】:2015-04-22 17:56:10
【问题描述】:
[{"acteurid":"86744570","productions":[{"variete":"Riz","recolte":"10000"}],"nom":"Charles Diouf"},{"acteurid":"6535150","productions":[{"variete":"Riz","recolte":"1000"}],"nom":"Daba Diouf"},{"acteurid":"86817462","productions":[{"variete":"Riz","recolte":"8000"}],"nom":"Diel Ndour"},{"acteurid":"14047190","productions":[{"variete":"Ble","recolte":"10000"},{"variete":"Mais","recolte":"1000"},{"variete":"Mais","recolte":"2000"},{"variete":"Riz","recolte":"5000"},{"variete":"Ble","recolte":"8000"}],"nom":"Hamady Diouf"}]
我如何读取上面的 json 数据?我想在ListView 中显示如下:
- 名义
- 多样化
- 回忆
- .variete
- .recolte
- 。 . . .
- 名义
- 多样化
- 回忆
我尝试了以下代码,但列表未显示。我有
FATAL EXCEPTION: main
java.lang.NullPointerException at
pcom.jsontest.MyCustomAdapter.getView(MyCustomAdapter.java:32)
代码是
for(int i=0;i<jarray.length();i++){
JSONObject json=jarray.getJSONObject(i);
JSONArray prodar=json.getJSONArray("productions");
for(int j=0;j<prodar.length();j++){
JSONObject prod=prodar.getJSONObject(j);
Production production = new Production(prod.getString("variete"),prod.getString("recolte"));
productions.add(production);
}
Producteur producteur=new Producteur(json.getString("acteurid"),productions,json.getString("nom"));
producteurs.add(producteur);
}
MyCustomAdapter adapter = new MyCustomAdapter(this,producteurs);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
自定义数组适配器
public class MyCustomAdapter extends ArrayAdapter<Producteur> {
public MyCustomAdapter(Context context, ArrayList<Producteur> prods) {
super(context, 0, prods);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
Producteur producteur = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
}
// Lookup view for data population
TextView name = (TextView) convertView.findViewById(R.id.name);
name.setText(producteur.getNom());
ArrayList<Production> productions=producteur.getProductions();
ListView listprod = (ListView) convertView.findViewById(R.id.list);
ArrayAdapter<Production> productionsAdapter = new ArrayAdapter<Production>(getContext(), R.layout.list_prod_item, productions);
listprod.setAdapter(productionsAdapter);
// Return the completed view to render on screen
return convertView;
}
}
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/nom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dip"
android:paddingTop="6dip"
android:textColor="#43bd00"
android:textSize="16sp"
android:textStyle="bold" />
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
list_prod_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/variete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dip"
android:paddingTop="6dip"
android:textColor="#43bd00"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/recolte"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dip"
android:paddingTop="6dip"
android:textColor="#43bd00"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
【问题讨论】:
-
我不确定你的意思。第一项是String,第二项是String to。
-
这就是您需要解析的所有数据吗?因为那是一个只有一项的 ArrayList (
[{},{},..])。因此,当您执行jarray.getJSONObject(i)时,您将获得全部数据。我明白这不是你想要的?你想做什么? -
@BishopBarber 我想显示我发布的 json 数据中的值。我通过在 servlet 中使用 json.put(id, member) 在应用程序服务器中创建它。第二个值包含子值。
-
等等,所以你不想读取json数据,而是将json数据发送到你的servlet?
-
@BishopBarber 抱歉,我已经编辑了我的帖子。我想读取json数据。
标签: java android json android-listview