[英]Get an arraylist from JSON response
我有一个节点js API,我正在使用Volley将JSON响应从其中获取到android,该API返回选择查询的结果,而我需要在android部分的对象“ News”的Arraylist中获取此结果。 这是节点js API的一部分:
connection.query("SELECT * FROM news",
function(err,rows,fields){
if (!err){
if (rows.length > 0){
res.setHeader('Content-Type', 'application/json');
res.send(rows);
}
else{
var error = {msg: "news is empty"}
res.send(error);
}
}
});
这是android部分,我需要从arraylist中的json响应中获取“行”:
String URLnews = "http://10.0.2.2:3000/getnews";
RequestQueue requestQueueNews = Volley.newRequestQueue(this);
JsonObjectRequest objectRequestNews = new JsonObjectRequest(
Request.Method.GET,
URLnews,
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject responsenews) {
Log.e("news length",responsenews.toString());
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Rest Response",error.toString());
}
}
);
requestQueueNews.add(objectRequestNews);
这是JSON响应:
[
{"idnews":1,"content":"news first news","image":"img"},
{"idnews":2,"content":"news 2","image":"img2"}
]
请注意,API正常工作,它返回结果,但是作为android中打印的String,但是我需要在arraylist中获取分隔对象中的每一行,这可能吗?
因为您的JSON对象位于JSON数组中,所以您需要将JsonObjectRequest更改为JsonArrayRequest。
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray responsenews) {
try {
for (int i = 0; i < responsenews.length(); i++) {
JSONObject object = responsenews.getJSONObject(i);
int id = object.getInt("idnews");
String content = object.getString("content");
String image = object.getString("image");
}
}catch (JSONException e) {
e.printStackTrace();
}
}
}
在这里,您缺少的是从JSON进行的转换。 例如,您可以使用GSON来完成工作。
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray responsenews) {
Log.e("news length",responsenews.toString());
Gson gson = new Gson();
Type type = new TypeToken<List<News>>() {}.getType();
List<News> news = gson.fromJson(responsestr, listType);
}
},
您将需要定义News类,仅此而已。
注意:答案已更新,以反映valentino正确注意到的事实,即应该是JSONArray请求
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.