【问题标题】:Json Array Request with volley not works凌空的Json数组请求不起作用
【发布时间】:2016-09-17 06:20:55
【问题描述】:

我有这样的 Json 值

{
"events": [2]
0:  {
"no": 1
"id": "2"
"nama": "Meja dengan kaki kuda"
"harga": 700000
"gambar": "poster/Donor_darah.jpg"
"stok": 39
"qty": 3
"status": 0
"total": 2100000
}-
1:  {
"no": 2
"id": "1"
"nama": "Lemari"
"harga": 500000
"gambar": "poster/grand-launching-gerakan-ui-mengajar-51.png"
"stok": 0
"qty": 4
"status": 0
"total": 2000000
}-
-
"total": 4100000
}

然后我想用这样的 volley 在我的 android 应用程序中检索它

JsonArrayRequest arrReq = new JsonArrayRequest(Request.Method.POST, DATA_GET_NOTIF + page,null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());

                        if (response.length() > 0) {
                            try {
                                for (int a = 0; a < response.length(); a++) {
                                    JSONObject obj = response.getJSONObject(a);
                                    JSONArray event = obj.getJSONArray("events");
                                    Log.d("JsonArray",response.toString());

                                    // Parsing json
                                    for (int i = 0; i < event.length(); i++) {

                                        JSONObject jb = (JSONObject) event.get(i);
                                        Cart news = new Cart();

                                        int total = 0;
                                        no = jb.getInt("no");

                                        news.setId(jb.getString("id"));
                                        news.setJudul(jb.getString("nama"));
                                        news.setHarga(jb.getInt("harga"));
                                        news.setStok(jb.getInt("stok"));
                                        news.setQty(jb.getInt("qty"));
                                        news.setStatus(jb.getInt("status"));
                                        news.setTotal(jb.getInt("total"));


                                        if (jb.getString("gambar") != "") {
                                            news.setImageUrl(jb.getString("gambar"));
                                        }


                                        // adding news to news array
                                        eventList.add(news);

                                        if (no > offSet)
                                            offSet = no;

                                        Log.d(TAG, "offSet " + offSet);


                                        // notifying list adapter about data changes
                                        // so that it renders the list view with updated data
                                        adapter.notifyDataSetChanged();
                                    }
                                }
                            }catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                        swipe.setRefreshing(false);
                    }

                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                swipe.setRefreshing(false);
            }

        }){
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> params = new HashMap<String, String>();
            params.put("authorization", apikeys);
            return params;
        }};

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(arrReq);

为什么它没有出现在我的应用程序中。因为它在我在我的 json 值中添加“事件”数组之前有效。所以在我添加事件数组之前,我的 json 值就像这样

[2]
0:  {
"no": 1
"id": "17"
"judul": "Compfest 8 Seminar"
"deskripsi": "tes"
"duit": 47
"persen": 47
"sisahari": 47
}-
1:  {
"no": 2
"id": "19"
"judul": "Grand Launching Gerakan UI Mengajar 5"
"deskripsi": "tes"
"duit": 80
"persen": 80
"sisahari": 80
}

当它像这样工作时我的代码:

JsonArrayRequest arrReq = new JsonArrayRequest(Request.Method.POST, DATA_GET_NOTIF + page,null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());

                        if (response.length() > 0) {
                            // Parsing json
                            for (int i = 0; i < response.length(); i++) {
                                try {


                                    JSONObject obj = response.getJSONObject(i);
                                    Cart news = new Cart();

                                    int total = 0;
                                    no = obj.getInt("no");

                                    news.setId(obj.getString("id"));
                                    news.setJudul(obj.getString("nama"));
                                    news.setHarga(obj.getInt("harga"));
                                    news.setStok(obj.getInt("stok"));
                                    news.setQty(obj.getInt("qty"));
                                    news.setStatus(obj.getInt("status"));
                                    news.setTotal(obj.getInt("total"));


                                    if (obj.getString("gambar") != "") {
                                        news.setImageUrl(obj.getString("gambar"));
                                    }

【问题讨论】:

  • 由于您的响应以花括号开头,因此它被认为是一个 json 对象(恰好包含一个 jsonarray)......但我认为 onresponse () 期望一个纯数组,它应该以一个方括号。有什么理由需要包含数组的名称吗?
  • 是的,我需要它,所以我可以对一个对象求和并将其放在“事件”数组之外。它已经解决了。只是开始 json 值的愚蠢错误

标签: android arrays json android-volley


【解决方案1】:

查看你的json格式,当它工作时

**[2]**
0:  {
"no": 1
"id": "17"
"judul": "Compfest 8 Seminar"
"deskripsi": "tes"
"duit": 47
"persen": 47
"sisahari": 47
}-

它首先以数组开头,因此您可以使用 jsonarrayrequest

但是当您更改 json 格式时,它会以 Json 对象而不是数组开头

**{**
"events": [2]
0:  {
"no": 1
"id": "2"
"nama": "M

所以你可以使用 jsonobjectrequest 代替 jsonarrayrequest 或者第二个选项你只是用数组而不是对象来改变你的新 json 格式

【讨论】:

  • 啊,我现在明白了。当我用数组开始我的 json 值并且仍然使用 JsonArrayRequest 时,它现在可以工作了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
相关资源
最近更新 更多