获取在android中的mvc(jsonResult)中创建的json对象

时间:2013-05-17 13:26:22

标签: java android asp.net-mvc json

我在mvc中创建了一个json结果,我正在构建一个Android应用来获取json结果。这是我的json结果的样子

{"name":"Mr. Spock","gender":"Male"}

这是我的控制器

public ActionResult Index()
        {

            var result = new { name = "Mr. Spock", gender = "Male" };
            return Json(result, JsonRequestBehavior.AllowGet);

        }

这是我在android中使用的

// Creating JSON Parser instance
JSONParser jParser = new JSONParser();

// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl(url);

JSONParser类

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONObject getJSONFromUrl(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

我有一个声明的变量url。每次调试时,json变量都没有任何值,并说“评估期间的错误”

有小费的人吗?我尝试过与Gson合作,但没有成功

亲切的问候

1 个答案:

答案 0 :(得分:0)

我会给你一些Gson的代码。使用它比内置的JSON解析代码更容易。这是使用JSON的最小示例。

Person.class:

package com.example.tutorial.models;

import com.google.gson.annotations.SerializedName;

public class Person {

    @SerializedName("gender")
    public String gender = "";

    @SerializedName("name")
    public String name = "";
}

当您的变量和JSON名称不同时,注释实际上是必需的,但我倾向于总是包含它们,因为它强化了它们来自JSON。

要反序列化:

Gson gson = new GsonBuilder().create();
Person person = gson.fromJson(json, Person.class);

真的很简单。如果这不起作用,请从Web服务器记录结果,并确保它确实是您期望的有效JSON字符串。

我有一个问题,你的AsyncTask在哪里?您尝试在UI线程中打开与Web服务器的连接肯定会导致NetworkOnMainThreadException。我创建了一个库来在Android上进行RESTful调用。它是在BSD下获得许可的,所以请随意使用它作为指南或直接使用它:https://github.com/nedwidek/Android-Rest-API