我在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合作,但没有成功
亲切的问候
答案 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