我是Android开发的新手。在这里,我正在打这样的GET
电话-
protected String doInBackground(String... params) {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("email", "guest@example.com"));
JSONHttpClient jsonHttpClient = new JSONHttpClient();
ProductDetail[] products = jsonHttpClient.Get(ServiceUrl.PRODUCT, nameValuePairs, ProductDetail[].class);
return null;
}
这是JSONHttpClient
文件-中的GET
调用
public <T> T Get(String url, List<NameValuePair> params, final Class<T> objectClass) {
DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("Accept", "application/json");
httpGet.setHeader("Accept-Encoding", "gzip");
httpGet.setHeader("Authorization", "Bearer <code>");
HttpResponse httpResponse = defaultHttpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity != null) {
InputStream inputStream = httpEntity.getContent();
Header contentEncoding = httpResponse.getFirstHeader("Content-Encoding");
if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) {
inputStream = new GZIPInputStream(inputStream);
}
String resultString = convertStreamToString(inputStream);
inputStream.close();
return new GsonBuilder().create().fromJson(resultString, objectClass);
}
return null;
}
这是我的ProductDetail
级
public class ProductDetail {
public int Id;
public String Name;
}
在运行这个,我得到以下错误-
No-args constructor for class com.compa.ProductDetail does not exist. Register an InstanceCreator with Gson for this type to fix this problem.
这是在JSONHttpClient文件-中的这一行引发的
return new GsonBuilder().create().fromJson(resultString, objectClass);
有人能帮忙吗?
在我的web api中,我创建了这样的json(prodfdetails是一个C#IEnumerable对象)-
json = JsonConvert.SerializeObject(proddetails);
var response = this.Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(json, Encoding.UTF8, "application/json");
return response;
响应json的结构是-
[
{
"Id": 1,
"Name": "First"
},
{
"Id": 2,
"Name": "Second"
}
]
即使您没有构造函数,Gson也会为您的类创建一个ObjectConstructor。但这并不总是安全的,也有其自身的局限性。这个关于SO的问题更详细:Gson是否必须使用默认的无args构造函数?
注意:请注意,如果这是一个内部类,那么它必须有一个构造函数,如文档中所述。
EDIT:您的json是一个数组。因此,您需要在包含类中拥有指定数量的数组对象。因此,您可以执行以下操作,然后进行投射:
public class ProductDetailArray {
public ProductDetailArray[] array;
public static ProductDetail {
public ProductDetail() {} // You can also make the constructor private if you don't want anyone to instantiate this
public int Id;
public String Name;
}
}
一旦你像以前一样抛出json:
ProductDetailArray obj = GsonBuilder.create().fromJson(response, ProductDetailArray.class);
ProductDetail one = obj.array[0];
ProductDetail two = obj.array[1];
然后你就可以操作了。。此外,您可能应该使用Gson.fromJson(),而不是GsonBuilder