【问题标题】:Android List View from Json来自 Json 的 Android 列表视图
【发布时间】:2017-03-09 20:51:09
【问题描述】:

我对 Android 很陌生,正在尝试从我的服务器上的 json 字符串填充列表视图。

我收到以下错误:

com.android.volley.ParseError: org.json.JSONException: Value ... of type org.json.JSONArray 无法转换为 JSONObject

尝试解析以下数组时:

[{
    "id": "7",
    "day": "Thursday",
    "offertitle": "Buy One Get One Free",
    "offerdesc": "Validity: Everyday ",
    "imagename": "bogof",
    "offercode": "none",
    "status": "YES"
}, {
    "id": "11",
    "day": "Thursday",
    "offertitle": "2-4-1 Cocktails ",
    "offerdesc": "Validity: Everyday",
    "imagename": "cocktails",
    "offercode": "none",
    "status": "YES"
}]

我正在使用此代码来解析 json:

     JSONArray jsonarray = new JSONArray(response);

      for (int i=0; i<jsonarray.length(); i++){

  JSONObject jsonProductObject = jsonarray.getJSONObject(i);
 String name = jsonProductObject.getString("offertitle");

  myFamily.add(name);

     }

任何帮助表示赞赏

完整方法:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_offers);

        final String PREFS_NAME = "userDefaults";
        final ListView myListView = (ListView) findViewById(R.id.listViewOffers);

        SharedPreferences settings_get = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
        final String smartCode2 = settings_get.getString("smartCode2", "");

        final ArrayList<String> myFamily = new ArrayList<>();

        RequestQueue queue = Volley.newRequestQueue(offers.this);
        String url = "http://www.barfibrenetwork.co.uk/backend/androidoffers.php?smartcode="+smartCode2;
// Request a string response from the provided URL.



        JsonObjectRequest jsObjRequest = new JsonObjectRequest
                (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Log.i("Response: ", response.toString());



                        try {

                            JSONArray jsonarray = new JSONArray(response);

                            for (int i=0; i<jsonarray.length(); i++){

                                JSONObject jsonProductObject = jsonarray.getJSONObject(i);
                                String name = jsonProductObject.getString("offertitle");

                                myFamily.add(name);

                            }



                        } catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }


                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.i("volley Request", error.toString());


                    }
                });
// Add the request to the RequestQueue.

        queue.add(jsObjRequest);

        Log.i("REPLY:", myFamily.toString());


        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myFamily);
        myListView.setAdapter(arrayAdapter);




    }

完整的 LogCat:

03-09 21:01:11.529 12696-12696/com.**** I/volley 请求:com.android.volley.ParseError: org.json.JSONException: Value [{"id":"7" ,"day":"Thursday","offertitle":"买一送一 (12pm-8pm)","offerdesc":"有效期:每天 12pm-8pm 当您在酒吧出示此页面时。谁喝过您买你就可以免费获得相同的饮料。某些产品线被排除在此促销活动之外。管理员自行决定排除某些日期。","imagename":"bogof","offercode":"none","status":"YES" },{"id":"11","day":"Thursday","offertitle":"2-4-1 Cocktails ","offerdesc":"有效期:每天下午 5-8 点,当您在酒吧。无论您购买哪种饮料,您都可以免费获得相同的饮料。包括的鸡尾酒用 * 表示。管理人员自行决定排除某些日期。","imagename":"cocktails","offercode":"none","status": "YES"},{"id":"18","day":"Thursday","offertitle":"本周葡萄酒 £21","offerdesc":"有效期:每周所选葡萄酒的每一天. 详情请咨询工作人员tes at 自行决定。","imagename":"wine","offercode":"none","status":"YES"},{"id":"25","day":"Thursday"," offertitle":"Unlimited Coffee £5","offerdesc":"有效期:5 英镑一杯咖啡,晚上 7 点前无限量喝咖啡。每位客户每天有效一次。不可转让。","imagename":"coffee","offercode":"none","status":"YES"},{"id":"32","day":"Thursday","offertitle" :"Single Vodka Redbull £5","offerdesc":"有效期:一周 7 天,全天,整夜。仅限 Smirnoff 伏特加,不能与任何其他优惠一起使用。","imagename":"redbull","offercode":"none","status":"YES"}] 类型为 org.json.JSONArray 不能转换为 JSONObject

【问题讨论】:

  • 你确定 JSON 是正确的吗? new JSONArray(response); 应该没问题
  • 嗨,是的,我很确定它是正确的,我对其进行了一些编辑以使其更易于阅读,但这是我从中提取的网址:barfibrenetwork.co.uk/backend/andriodoffers.php
  • 您的代码运行良好,如果您打印 myFamily,您将获得 [买一送一,2-4-1 鸡尾酒]
  • 请显示完整的 logcat 和方法定义

标签: android json listview


【解决方案1】:

您正在使用 JsonObjectRequest 但您的 json 中没有 JSONObject。

试试这个。 希望对你有帮助:D

代码:

JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
     if (response != null) {
         try {
             for(int i = 0; i < response.length(); i++) {
                 JSONObject jsonProductObject = jsonarray.getJSONObject(i);
                 String name = jsonProductObject.getString("offertitle");
                 myFamily.add(name);
             }
         } catch (JSONException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }
}}, new Response.ErrorListener() {
      @Override
      public void onErrorResponse(VolleyError error) {
           Log.i("volley Request", error.toString());
      }
});

【讨论】:

    【解决方案2】:

    Volley Library 已弃用我的建议是改用 OkHttp Library Volley 看一个例子,这个方法接受一个 Url 和 Fetch Json 响应。

    public static String JsonResponse(URL url) throws IOException {
        OkHttpClient client = new OkHttpClient();
        okhttp3.Request request = new okhttp3.Request.Builder()
                .url(url)
                .build();
    
        Response response = client.newCall(request).execute();
        return response.body().string();
    }
    

    注意: 这个库在主线程中工作,所以你应该使用AsyncTask

    更新

    查看官方仓库Here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-13
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多