我已经尝试了几乎所有的东西,我在这个阶段很沮丧,我想如果我能在android端得到一个json对象来填充一个视图列表,我已经尝试格式化json发送的每一种方式,我可能知道如何。如有任何建议,我将不胜感激。
JsonStringRequest接收json fine作为一个字符串,但是解析它到一些有用的东西一直是一个痛苦,我还没有设法得到一个有效的方式为整个项目。尝试将字符串转换为JsonObject或Array失败,并出现相同的错误。
JsonArray-和Object-Request都失败了,出现了类似的错误。
我有一种感觉,这不是android端,而是我从rest服务发送json的方式,或者是Volley处理它的方式。
Asp.net Web Api控制器类
using Newtonsoft.Json;
[RoutePrefix("users")]
public class UsersController : ApiController
{
public IHttpActionResult getUsers()
{
User[] users = new User[]
{
new User { userID = "one", Name = "Tomato Soup", Surname = "Groceries", Nickname = "boogie" },
new User { userID = "two", Name = "Tomato Soup", Surname = "Groceries", Nickname = "boogie" }
};
string json = JsonConvert.SerializeObject(users);
return Json(json);
}
}
正在发送的JSON:
"[{"userID ","","","番茄汤","姓","杂货",""的绰号:"不羁"},{"userID ","","","番茄汤","姓","杂货",""的绰号:"不羁"}]"
正在发送的XML:
[{"标识":"一"、"名称":"番茄汤","姓":"食品"、"昵称":"不羁"},{"标识":"两个","名字":"番茄汤","姓":"食品"、"昵称":"不羁"}]
Android端请求:JsonObjectRequest (Very similar to JsonArrayRequest):
JsonObjectRequest request = new JsonObjectRequest("http://10.0.0.3/users",
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response)
{
Log.w("##########", response.toString());
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.w("##########", error.getMessage());
}
}
) ;
queue.add(request);
StringRequest:
StringRequest req = new StringRequest("http://10.0.0.3/users", new Response.Listener<String>(){
public void onResponse(String response)
{
try
{
JSONObject jar = new JSONObject(response);
}
catch(JSONException error)
{
Log.w("error", error.getMessage());
}
Log.w("############", response);
Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error)
{
Log.w("error", error.getMessage());
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG);
}
});
queue.add(req);
Logcat错误:
org.json.JSONException: Value [{"userID":"one","Name":"Tomato Soup","Surname":"Groceries","Nickname":"boogie"},{"userID":"two","Name":"Tomato Soup","Surname":"Groceries","Nickname":"boogie"}] of type java.lang.String cannot be converted to JSONObject
因为结果是JSONArray
,所以可以使用JsonArrayRequest
代替JsonObjectRequest
。如果您已经使用JsonArrayRequest
并且有任何错误,请将错误消息或任何logcat信息与JsonArrayRequest
一起发布。
您可以点击这里和这里查看更多信息
JSONObject:…以{(左大括号)开始,以}(右大括号)结束的字符串。
JSONArray:…以[(左括号)开始,以](右括号)结束的字符串。
希望这对你有帮助!
哇,我明白了。我是双序列化用户数组对象,似乎如果我返回对象不使用JsonConvert。SerializeObject,它自动将对象序列化为json。我不确定这是否因为它是web api 2固有的(我还没有阅读所有的文档)。不过还是谢谢你了