Volley post请求中的JSON格式无效

sig*_*onf 1 java post android json android-volley

我想通过

 data={"process" : "ExampleProcess", "phone" : "123456"}
Run Code Online (Sandbox Code Playgroud)

作为一个截击请求,到目前为止,我已经设法创建一个(非常基本的)方法,将所需的信息发送到服务器,但我得到一个失败的响应.

我将日志添加到我可以看到的程序中

ERROR :: com.android.volley.ParseError:org.json.JSONException:字符2处的输入结束

但我认为这与我试图发送信息的方式有关.经过调试,我也意识到我收到了错误信息

方法抛出'java.lang.NullPointerException'异常.无法评估org.json.JSONObject.toString();

我不知道该做什么,即使我改变了:

        total.put("data", data.toString());
Run Code Online (Sandbox Code Playgroud)

        total.put("data", data);
Run Code Online (Sandbox Code Playgroud)

错误将持续存在.在这一点上,我不知道如何向我的URL发送正确的JSON post请求(已从示例btw中取出)

public void volleyConnector(String url) {
        final JSONObject data = new JSONObject();
        final JSONObject total = new JSONObject();


        try {

            data.put("process", "ExampleProcess");
            data.put("phone"  , "123456789");
            total.put("data", data.toString());

        } catch(JSONException e) {

            Log.v("JSON ERROR: ", e.toString());
        }


         JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( url, total, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.v("--------------","---------------------------");
                Log.v("RESPONSE: ", "-----> " + response.toString());
                Log.v("<----- BTW------>", total.toString());
                Log.v("--------------","---------------------------");

            }
        }, new Response.ErrorListener(){
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.v("--------------","---------------------------");
                Log.v("RESPONSE: " , "xXxX FAIL X_____X FAIL XxXx");
                Log.v("|>>>ERROR:    ", error.toString());
                //Log.v("|>>>ERROR:    ", error.getLocalizedMessage());
                Log.v("<----- BTW------>", total.toString());

                Log.v("--------------","---------------------------");


            } // end of onErrorREsponse
        }){
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    HashMap<String, String> headers = new HashMap<String, String>();
                    headers.put("Content-Type", "application/json; charset=utf-8");
                    return headers;
                }

        };
        Volley.newRequestQueue(this).add(jsonObjectRequest);
    } // end of volley connector method
Run Code Online (Sandbox Code Playgroud)

我的完整错误日志(根据失败的请求)读取:

V/RESPONSE:: xXxX FAIL X_____X FAIL XxXx
V/|>>>ERROR:: com.android.volley.ParseError: org.json.JSONException: End of i 
V/<----- BTW------>: {"data":"{\"process\":\"ExampleProcess\",\"phone\":\"123456789\"}"}
Run Code Online (Sandbox Code Playgroud)

我不太确定发生了什么,我没有通过阅读文档和使用Android工作室进行调试.就我而言,其中一个参数是一个JSONObject,我传入了一个参数,虽然它可能是错误格式化的.

任何帮助/指针将不胜感激.

Kai*_*ade 6

你做得对,但是在你的代码中进行一次小改动就可以尝试代码一次 -

JSONObject data= new JSONObject();

            data.accumulate("username", "mobileGps");
            data.accumulate("password", "9565551236");

            JSONObject total= new JSONObject();
            total.put("data",data);

            json = jsonObjectNew.toString(); 
Run Code Online (Sandbox Code Playgroud)

并将此"json"传递给方法并检查一次.看起来一样,但尝试一次.