Web Api和Android应用程序之间的JsonObjectRequest



我已经尝试了几乎所有的东西,我在这个阶段很沮丧,我想如果我能在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固有的(我还没有阅读所有的文档)。不过还是谢谢你了

相关内容

  • 没有找到相关文章

最新更新