【问题标题】:Display json data to list view将 json 数据显示到列表视图
【发布时间】:2014-08-21 13:01:20
【问题描述】:

我正在尝试将 JSON 数组中的数据显示到 ListView。但它给了我一个例外:

org.json.JSONException: Value [{"fine_id":"51771","street":"Tom Mboya","area":"Uptown","car_no":"MP08MF3299"}] of type org.json.JSONArray cannot be converted to JSONObject

我在哪里做错了,请帮我解决问题

08-21 08:33:54.640: E/JSON(943): 
[
{
  "car_no":"MP08MF3299"
 ,"fine_id":"51771"
 ,"area":"Uptown"
 ,"street":"Tom Mboya"
}
]
08-21 08:33:54.640: D/Response:(943): [{"car_no":"MP08MF3299","fine_id":"51771","area":"Uptown","street":"Tom Mboya"}]
08-21 08:33:54.650: W/System.err(943):
 org.json.JSONException: 
Value 
[
 {
  "fine_id":"51771"
 ,"street":"Tom Mboya"
 ,"area":"Uptown"
 ,"car_no":"MP08MF3299"
 }
] of type org.json.JSONArray cannot be converted to JSONObject
08-21 08:33:54.680: W/System.err(943):  at org.json.JSON.typeMismatch(JSON.java:111)
08-21 08:33:54.680: W/System.err(943):  at org.json.JSONObject.<init>(JSONObject.java:159)
08-21 08:33:54.740: W/System.err(943):  at org.json.JSONObject.<init>(JSONObject.java:172)
08-21 08:33:54.740: W/System.err(943):  at com.example.umoja_parking.ClamperActivity$FetchVehiclesTask.doInBackground(ClamperActivity.java:182)
08-21 08:33:54.780: W/System.err(943):  at com.example.umoja_parking.ClamperActivity$FetchVehiclesTask.doInBackground(ClamperActivity.java:1)
08-21 08:33:54.780: W/System.err(943):  at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-21 08:33:54.790: W/System.err(943):  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-21 08:33:54.830: W/System.err(943):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-21 08:33:54.830: W/System.err(943):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-21 08:33:54.840: W/System.err(943):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-21 08:33:54.840: W/System.err(943):  at java.lang.Thread.run(Thread.java:841)
08-21 08:33:54.880: I/System.out(943): Fetching Response[{"car_no":"MP08MF3299","fine_id":"51771","area":"Uptown","street":"Tom Mboya"}]

这是我的活动代码

public class ClamperActivity extends ListActivity {


JSONParser jsonParser = new JSONParser();

private static final String CAR_NO = "car_no";
private static final String FINE_ID = "fine_id";
private static final String AREA = "area";
private static final String STREET = "street";

JSONArray jsonArray = null;

 ArrayList<HashMap<String, String>> jsonlist;

 public static String user_id="";

 static String url= "";

// JSON Node names
private static final String TAG_SUCCESS = "success";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clamper);
jsonlist = new ArrayList<HashMap<String,String>>();
ListView lv = getListView();

new FetchVehiclesTask().execute();

}

class FetchVehiclesTask extends AsyncTask<Void, Void, Void>
{
private ListActivity activity;

protected void onPreExecute() {
    super.onPreExecute();
    pDialog = new ProgressDialog(ClamperActivity.this);
    pDialog.setMessage("Fetching Vehicles List...");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(true);
    pDialog.show();
}

protected Void doInBackground(Void... args0)
{
     System.out.println("Login Street clamper ="+LoginActivity.street);
     System.out.println("Login Area clamper ="+LoginActivity.area);
     System.out.println("Login Uid clamper = "+LoginActivity.user_id);
     JSONParser jsonParser = new JSONParser();
        UserFunctions userFunction = new UserFunctions();
        String json = userFunction.clamperFetch(LoginActivity.street,   LoginActivity.area, LoginActivity.user_id);
        Log.d("Response:",json);
        if(json!=null)
        {
            try{
                JSONObject jsonObj = new JSONObject(json);
                jsonArray = jsonObj.getJSONArray("");
                for(int i=0;i<jsonArray.length();i++)
                {
                    JSONObject c = jsonArray.getJSONObject(i);
                    String fineId = c.getString(FINE_ID);
                    String street2 = c.getString(STREET);
                    String area2 = c.getString(AREA);
                    String carNo = c.getString(CAR_NO);
                    HashMap<String,String>jsonArray = new HashMap<String,String>();
                    jsonArray.put(FINE_ID,fineId);
                    jsonArray.put(STREET, street2);
                    jsonArray.put(AREA, area2);
                    jsonArray.put(CAR_NO, carNo);
                    jsonlist.add(jsonArray);

                }
            }catch(JSONException e){
                e.printStackTrace();
            }
        }else {
            Log.e("JASON Parser", "Couldn't get any data from the url");
        }



       // Log.e("Fetching Response:>", json);
        System.out.println("Fetching Response" +json);

           return null;
}
protected void onPostExecute(final Boolean success) {
    // dismiss the dialog once done
    if(pDialog.isShowing())
    {
        pDialog.dismiss();
    }
    ListAdapter adapter = new SimpleAdapter(
            ClamperActivity.this,jsonlist,
            R.layout.list_item,
            new String[]{FINE_ID,STREET,AREA,CAR_NO},
            new int[]{R.id.carNo,R.id.fineId,R.id.area1,R.id.street1});
    setListAdapter(adapter);

}
}

}

这是我的用户函数类

public String clamperFetch(String street,String area, String user_id)
{
     List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("street",street));
        params.add(new BasicNameValuePair("area",area));
        params.add(new BasicNameValuePair("user_id",user_id));
        String json = jsonParser.getJSONStringFromUrl(url_fetch,params);

    return json;
}

activity_clamper.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.umoja_parking.ClamperActivity" >

<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentBottom="true" />

</RelativeLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp" >

<TextView
    android:id="@+id/carNo"
    android:layout_width="fill_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/fineId"
    android:layout_width="fill_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/area1"
    android:layout_width="fill_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/street1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="2dip"
    android:paddingTop="6dip"
    android:textColor="#43bd00"
    android:textSize="16sp"
    android:textStyle="bold" />

</LinearLayout>

【问题讨论】:

  • @Nabin 是的,它是有效的 JSON
  • 第 182 行是什么?
  • @Nabin JSONObject jsonObj = new JSONObject(json);
  • @Nabin 你所做的更改
  • Agrawal 在下面查看我的答案,如果它解决了您的问题,请告诉我

标签: android arrays json listview jsonobject


【解决方案1】:

执行以下操作:

改变

JSONObject data = jsonObj.getJSONObject(json); 

JSONArray data = jsonObj.getJSONArray(json);

json 是一个数组,而不是一个对象。因此你得到了一个例外。

已编辑:

for(int i=0; i<data.length(); i++)
{
     JSONObject obj=data.getJSONObject(i);
     String value1 = obj.getString(FINE_ID); 
        String value2 = obj.getString(WHATEVER YOU WANT); 
        System.out.println(value1);
        System.out.println(value2);
}

附言

[ represents JSON array node

{ represents JSON object node

【讨论】:

  • System.out(937): 在用户函数 ClamperFetch[{"car_no":"MP08MF3299","fine_id":"51771","area":"Uptown","street":"汤姆·姆博亚"}]
  • 请发布您的activity_clamper.xml
  • 在 doInBackground() 中制作 HashMap 对象之前,还要对 street2 area2 执行 System.out.println(fineId) 和类似操作
  • 嘿,我已经发布了 activity_clamper.xml 和 list_item.xml 请看上面......
  • /System.out(937): FineId=51771 08-21 09:40:48.360: I/System.out(937): Street=Tom Mboya 08-21 09:40:48.360: I/System.out(937): Area=Uptown 08-21 09:40:48.360: I/System.out(937): Car_No=MP08MF3299
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
相关资源
最近更新 更多