接收 JSON 对象总是因 Voley 而失败
receiving JSONobject allways failed with Voley
当我尝试使用 volley 与服务器通信时遇到问题(我创建了服务器,因此我也可以在此处进行更改)。
所以当我使用 stringRequest
时,我遇到了这个问题:
我的字符串包含 2 个引号,例如,字符串如下所示:“"something"”
当我发送 "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'}"
但问题总是一样。不知道为什么。
所以请,如果有人可以帮助我。我将不胜感激
编辑:
这是我的代码:
Json对象请求:
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);
}
致每一位和我有同样问题的人。
使用 Volley 在 WCF 服务器和 Android 应用程序之间建立通信。
对于 StringRequest
的解决方案是 above.I 只需使用 .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
当我尝试使用 volley 与服务器通信时遇到问题(我创建了服务器,因此我也可以在此处进行更改)。
所以当我使用 stringRequest
时,我遇到了这个问题:
我的字符串包含 2 个引号,例如,字符串如下所示:“"something"”
当我发送 "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'}"
但问题总是一样。不知道为什么。
所以请,如果有人可以帮助我。我将不胜感激
编辑:
这是我的代码:
Json对象请求:
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);
}
致每一位和我有同样问题的人。
使用 Volley 在 WCF 服务器和 Android 应用程序之间建立通信。
对于 StringRequest
的解决方案是 above.I 只需使用 .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