如何修复Android Studio中的“空json数据”错误

时间:2019-05-09 14:16:42

标签: java android arrays

我正在尝试将字符串数组列表转换为JSONArray,然后将其发送到远程服务器

我希望它以JSONarray格式发送我的数组 这是错误"'java.lang.String org.json.JSONObject.getString(java.lang.String)' on a null object reference"

我的数组有2个元素, 当我尝试在log.d中获取它们时:list ja [null,null]

这是我正在使用的代码

public void sendCommande (){
        bt_newCommande.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //----------------------------------
                StringRequest stringRequest = new StringRequest(Request.Method.POST,url_ProdCommande, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d(TAG,"element envoie !");
                        //listProRest.clear();
                        //adapter.notifyDataSetChanged();
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                    }
                })
                {
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        Map<String,String> params = new HashMap<String,String>();
                        JSONArray ja = new JSONArray(db.afficherTousProduit());
                        Log.d(TAG,"list ja "+ja.toString());
                        for(int i =0;i<ja.length();i++){
                            JSONObject j = ja.optJSONObject(i);
                            /*
                            try {
                                params.put("idProduit",j.getString(db.afficherTousProduit().get(i).getIdProduct()));
                                params.put("qte",j.getString(String.valueOf(db.afficherTousProduit().get(i).getQtePro())));
                                params.put("heure",j.getString(db.afficherTousProduit().get(i).gethCollete()));
                                params.put("date",j.getString(db.afficherTousProduit().get(i).getDateCollete()));
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                            */
                        }
                        //params.put("id",arrayList.get(position).getIdProduct());
                        return params;
                    }
                };
                RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
                requestQueue.add(stringRequest);
            }
        });
    }

1 个答案:

答案 0 :(得分:0)

看来

出了问题
db.afficherTousProduit().get(i).getIdProduct()

我将设置一个断点并检查数据库是否正在返回您希望它返回的内容。

从查看您的代码来看,您似乎在做几次额外的工作,即往返于JSON。我可能是错的,但是我认为可以这样清除:

                @Override
                protected Map<String, String> getParams() throws AuthFailureError {
                    Map<String,String> params = new HashMap<String,String>();
                    JSONArray ja = new JSONArray(db.afficherTousProduit());
                    Log.d(TAG,"list ja "+ja.toString());
                    // Begin iterating through the JSON Array
                    for (int i=0; i < arr.length(); i++) {
                        // Get current JSON Object at index i
                        JSONObject j = arr.getJSONObject(i)
                        try {
                            // Return the specified value associated with the String for the current object
                            params.put("key",j.getJsonString("key");
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    //params.put("id",arrayList.get(position).getIdProduct());
                    return params;
                }

获取json数组的权限不应该超过一个数据库访问权限,然后只需遍历每个对象并从中获取所需的内容即可。查看Java docs了解更多信息。