Voley始终无法接收JSONobject

时间:2018-12-04 05:17:15

标签: android http android-volley jsonobjectrequest

当我尝试使用Volley与服务器通信时遇到了问题(我创建了服务器,因此我也可以在此处进行更改)。
因此,当我使用stringRequest时遇到了以下问题:
我的字符串包含2个引号,例如,字符串看起来像这样:“” something“” 当我发送“内容”时,以及当我尝试使用

之类的数据时
if (response == "\"something\"")
     do something

那是行不通的。我只是不能正常使用此字符串。

当我尝试使用JsonObjectRequest时,我不知道为什么,但是我总是遇到这个问题:

org.json.JSONException: Value {"name":"nofind"} of type java.lang.String cannot be converted to JSONObject

我尝试发送此邮件:

"{\"name\":\"nofind\"}",  
"{'name':'nofind'}",  
"{name:\"nofind\"}",  
"{name:'nofind'}"  

但这总是相同的问题。不知道为什么
所以请有人帮助我。我将非常感激

编辑:
这是我的代码:
JsonObjectRequest:

JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, URL_SERVER+URL_IMAGE,
            null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                resultsTextView.setText(response.toString());
                snackbar.dismiss();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("ERROR","error => "+error.toString());
                    resultsTextView.setText(R.string.ErrorServor);
                    snackbar.dismiss();
                }
            }){
        @Override
        public byte[] getBody(){
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            faceBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] byteArray = stream.toByteArray();
            faceBitmap.recycle();
            return byteArray ;
        }

        @Override
        public String getBodyContentType() {
            return "image/jpeg";
        }
    };
    request.setRetryPolicy(new DefaultRetryPolicy(
            0,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    queue.add(request);

字符串请求:

StringRequest request = new StringRequest(Request.Method.POST, URL_SERVER + URL_IMAGE,
            this, this){

        @Override
        public byte[] getBody() {
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            faceBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] byteArray = stream.toByteArray();
            faceBitmap.recycle();
            return byteArray ;
        }

        @Override
        public String getBodyContentType() {
            return "image/jpeg";
        }
    };
    request.setRetryPolicy(new DefaultRetryPolicy(
            0,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    queue.add(request);
}


@Override
public void onErrorResponse(VolleyError error) {
    Log.d("ERROR","error => "+error.toString());
    resultsTextView.setText(R.string.ErrorServor);
    snackbar.dismiss();
}

@Override
public void onResponse(String response) {
    try {
        if (response != "nofind")
        {
            resultsTextView.setText(response);
            NoButton.setVisibility(View.VISIBLE);
            YesButton.setVisibility(View.VISIBLE);
        }
        else {
            resultsTextView.setText(R.string.NoBack);
        }
        resultsTextView.setText(obj.toString());
    } catch (JSONException e) {
        e.printStackTrace();
        System.out.println(e);
    }

1 个答案:

答案 0 :(得分:0)

对于每个与我有相同问题的人。
使用Volley在WCF服务器和Android应用程序之间建立通信。
对于StringRequest,解决方案已写在上面。我只需要使用.equals(MyString)来代替==MyString
但是对于JsonObjectRequest,问题出在服务器上。在BodyStyle参数中。 解决方案是我只包装响应。
这就是为我工作的职能。

[OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "/NewUser",BodyStyle = WebMessageBodyStyle.WrappedResponse, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    dynamic NewUser(User user);

此处有关BodyStyle的更多信息: RESTful web service body format