Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么JSON响应是200_Java_Android_Json_Android Volley - Fatal编程技术网

Java 为什么JSON响应是200

Java 为什么JSON响应是200,java,android,json,android-volley,Java,Android,Json,Android Volley,a) 实际上,我有一个端点,它将使用截击发送到服务器。我的api也有自定义头和自定义体。问题是当我想要得到JSON的响应时,它不会显示它。相反,它将显示200。为此,我没有使用表单,但我只是从共享首选项中获取主体数据 b) 我有另一个端点使用自定义头和体,但使用表单将数据提交到服务器。JSON响应正常,并将显示它 a) JSON响应将显示200 //另一种方法的代码是 jsonBody.put(“tbid”,id) id不是像b一样从edittext获取的。而是从共享首选项获取的,我确认id是合

a) 实际上,我有一个端点,它将使用截击发送到服务器。我的api也有自定义头和自定义体。问题是当我想要得到JSON的响应时,它不会显示它。相反,它将显示200。为此,我没有使用表单,但我只是从共享首选项中获取主体数据

b) 我有另一个端点使用自定义头和体,但使用表单将数据提交到服务器。JSON响应正常,并将显示它

a) JSON响应将显示200

//另一种方法的代码是

jsonBody.put(“tbid”,id)

id不是像b一样从edittext获取的。而是从共享首选项获取的,我确认id是合法的并获取数据

b) 将显示JSON响应

{ success:"1",message:"register" }
//这是b的代码

private void requestOTP(){
    pDialog = new ProgressDialog(this);
    pDialog.setCancelable(false);
    pDialog.setMessage("OTP OTW...");
    showDialog();

    try {
                    RequestQueue requestQueue = Volley.newRequestQueue(this);
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("tbid", str5);
        jsonBody.put("phone",phone.getText().toString());
        final String mRequestBody = jsonBody.toString();

        StringRequest strReq = new StringRequest(Request.Method.POST, URL_OTP_REQUEST, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.e(TAG, "OTP Response: " + response);

                hideDialog();

                try {
                    JSONObject jObj = new JSONObject(response);
                    success = jObj.getInt(TAG_SUCCESS);

                    Log.e(Integer.toString(success),"SuccessRe");


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "OTP Error : " + error.getMessage());
                Toast.makeText(getApplicationContext()," OTP Error ",
                        Toast.LENGTH_LONG).show();
                hideDialog();
            }
        }){

                            @Override
            public String getBodyContentType() {
                return "application/json; charset=utf-8";
            }

            @Override
            public byte[] getBody() throws AuthFailureError {
                try {
                    return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
                } catch (UnsupportedEncodingException uee) {
                    VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
                    return null;
                }
            }



            @Override
            protected Response<String> parseNetworkResponse(NetworkResponse response) {
                String responseString = "";
                if (response != null) {
                    responseString = String.valueOf(response.statusCode);
                }
                return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
            }


            /** Passing some request headers* */
            @Override
            public Map getHeaders() throws AuthFailureError {
                HashMap headers = new HashMap();
                headers.put("Auth-Key", "xxx");
                headers.put("Token", token);
                return headers;
            }


        };



        //Adding request to request queue

        requestQueue.add(strReq);

    }catch (JSONException e) {
        e.printStackTrace();
    }



}
private void requestOTP(){
pDialog=新建进度对话框(此对话框);
pDialog.setCancelable(假);
设置消息(“OTP OTW…”);
showDialog();
试一试{
RequestQueue RequestQueue=Volley.newRequestQueue(this);
JSONObject jsonBody=新的JSONObject();
jsonBody.put(“tbid”,str5);
jsonBody.put(“phone”,phone.getText().toString());
最后一个字符串mRequestBody=jsonBody.toString();
StringRequest strReq=新的StringRequest(Request.Method.POST,URL\u OTP\u请求,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
Log.e(标签“OTP响应:”+响应);
hideDialog();
试一试{
JSONObject jObj=新的JSONObject(响应);
success=jObj.getInt(TAG_success);
Log.e(Integer.toString(success),“SuccessRe”);
}捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(标记“OTP错误:+Error.getMessage());
Toast.makeText(getApplicationContext(),“OTP错误”,
Toast.LENGTH_LONG).show();
hideDialog();
}
}){
@凌驾
公共字符串getBodyContentType(){
返回“application/json;charset=utf-8”;
}
@凌驾
公共字节[]getBody()抛出AuthFailureError{
试一试{
返回mRequestBody==null?null:mRequestBody.getBytes(“utf-8”);
}捕获(不支持的编码异常uee){
wtf(“尝试使用%s获取%s的字节时不支持编码”,mRequestBody,“utf-8”);
返回null;
}
}
@凌驾
受保护的响应parseNetworkResponse(NetworkResponse响应){
字符串responseString=“”;
if(响应!=null){
responseString=String.valueOf(response.statusCode);
}
返回Response.success(responseString,HttpHeaderParser.parseCacheHeaders(Response));
}
/**传递一些请求头**/
@凌驾
公共映射getHeaders()引发AuthFailureError{
HashMap headers=新的HashMap();
headers.put(“Auth Key”、“xxx”);
headers.put(“Token”,Token);
返回标题;
}
};
//将请求添加到请求队列
添加(streq);
}捕获(JSONException e){
e、 printStackTrace();
}
}
c) 我还使用端点创建了一个新项目,因为我认为问题可能是json响应来自项目中的另一个端点,但没有任何改变

d) 已经使用了postman,结果还可以,它会像b一样显示json响应

e) 我的另一个测试选项是使用异步任务还是使用表单发布数据体

为什么我对a&b得到不同的结果??是服务器端的问题还是客户端的问题?这是因为我没有使用表单发送数据体??我知道200响应表示连接正常。但我只想知道为什么我没有像a中那样得到JSON响应


截击

这是因为该方法解析了NetworkResponse。请禁用此方法

                @Override
            protected Response<String> parseNetworkResponse(NetworkResponse response) {
                String responseString = "";
                if (response != null) {
                    responseString = String.valueOf(response.statusCode);
                }
                return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
            }
@覆盖
受保护的响应parseNetworkResponse(NetworkResponse响应){
字符串responseString=“”;
if(响应!=null){
responseString=String.valueOf(response.statusCode);
}
返回Response.success(responseString,HttpHeaderParser.parseCacheHeaders(Response));
}

在这之后,您肯定会得到json响应。

Nope bro。我得到b的结果。但是为什么a没有显示它。不确定问题是在客户端还是服务器端。在第一种情况下,您是否可以尝试使用发出请求,并查看http响应中是否有json正文?有时候,REST API在没有数据返回的情况下只在正文中回复200。@Arnauddenoylle已经更新了我的问题。只需在邮递员中进行测试,但结果显示如b中所示。您能用您的答案更新您的问题吗code@RohitSuthar已经用代码更新了