使用Volley解析JSON(从选择数据库中)

时间:2018-06-30 02:43:05

标签: json android-volley

我尝试解析数据库中的数据并将其显示在listview上。但是,由于logcat中没有显示Volley错误,所以我不知道如何解决。这是我的代码:

JsonResult

{"result":[{"namaBarang":"kabel","jumlahBarang":"5","tglKel":"2018-06-06"},{"namaBarang":"optical power meter","jumlahBarang":"5","tglKel":"0000-00-00"}]}

从该json结果中,我尝试使用 JsonObject 对其进行解析,这就是我的 JsonObject 的样子。

活动

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

        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONObject obj = response.getJSONObject("result");
                BarangKeluar bk = new BarangKeluar();
                bk.setNamaBarang(obj.getString("namaBarang"));
                bk.setJumlahBarang(obj.getString("jumlahBarang"));
                bk.setTglBarang(obj.getString("tglBarang"));
                bkList.add(bk) ;
            } catch (JSONException e) {
                e.printStackTrace();
            }
            // notifying list adapter about data changes
            // so that it renders the list view with updated data
            adapter.notifyDataSetChanged();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
        }
    });
    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(bkRequest);

但是当我将其推送到手机上后,列表视图中没有填充我的json。

UPDATE1 已经尝试尝试使用手枪和IntelliJ Amiya代码,但仍无法正常工作。

Logcat

  

D / TextView:具有样式的setTypeface:0 I / System.out:(HTTPLog)-静态:   isSBSettingEnabled false I / System.out:(HTTPLog)-静态:   isSBSettingEnabled false D / AbsListView:onsize更改D / Volley:[1]   2.onErrorResponse:AppController

但是我的AppController与本教程的This配合正常。

标记的线程在Another个线程中重复。我对此进行了查找,不同的是大多数答案都使用HttpConnection。


已解决

最后,我解决了这个问题。

这是修复后的代码。

活动

//Create JsonObjectRequest
JsonObjectRequest bkRequest = new JsonObjectRequest(Request.Method.GET, url, null,new
Response.Listener<JSONObject>(){
        @Override
        public void onResponse(JSONObject response) {
            Log.d(TAG, response.toString());

            try {
                JSONArray obj = response.getJSONArray("result");
                for(int i=0;i< obj.length();i++) {
                    JSONObject json     = obj.getJSONObject(i);
                    BarangKeluar bk = new BarangKeluar();
                    bk.setNamaBarang(json.getString("namaBarang"));
                    bk.setJumlahBarang(json.getString("jumlahBarang"));
                    bk.setTglBarang(json.getString("tglKel"));

                    //Adding data into array
                    bkList.add(bk);
                }

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

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
        }
    });
    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(bkRequest);

2 个答案:

答案 0 :(得分:1)

预期错误为

  

JSONArray无法转换为JSONObject

  • 您的 result JSONArray
  • 没有 tglBarang KEY 。设置适当的名称。

不要

JSONObject obj = response.getJSONObject("result");

要做

 JSONArray jsonArray = response.getJSONArray("result");

验证码

JSONArray jsonArray = response.getJSONArray("result");
   for(int i=0;i<jsonArray.length;i++)
   {
     JSONObject json     = jsonArray.getJSONObject(i);
     String namaBarang   = json.getString("namaBarang");
     String jumlahBarang = json.getString("jumlahBarang");
     String tglKel       = json.getString("tglKel");

            BarangKeluar bk = new BarangKeluar();
            bk.setNamaBarang(namaBarang);
            bk.setJumlahBarang(jumlahBarang);
            bk.setTglBarang(tglKel);
            bkList.add(bk) 
   }

答案 1 :(得分:1)

您错过了JSONArray和“ tglBarang”->“ tglKel”

    JSONArray obj = response.getJSONArray("result");
    for (int i = 0; i < obj.length(); i++) {
        String namaBarang = obj.getJSONObject(i).getString("namaBarang");
        String jumlahBarang = obj.getJSONObject(i).getString("jumlahBarang");
        String tglKel = obj.getJSONObject(i).getString("tglKel");
    }