【发布时间】:2019-07-13 04:43:34
【问题描述】:
我想从我的 json 中填充一个列表视图,如下所示:
{ library: { books: [ { name: "name", autor: "autor",year: "year"}, { name: "name", autor: "autor", year: "year"}], library: { name: "name"}}}
在主要活动中我有这个方法
public void books() {
request = new JsonRequestClass(getContext(), JsonMethodClass.GET, null);
try {
String response = request.execute("http://booksjson").get();
ResponseListModel responseListModel = new ResponseListModel(response);
if (responseListModel.isSuccess() == true) {
} else {
responseListModel.setSuccess(false);
responseListModel.setMessage("Error");
//Toast.makeText(getContext(), responseListModel.getMessage(), Toast.LENGTH_LONG).show();
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
这个方法帮助我阅读 json 但是如果我有一个 void 方法并且在我的适配器类中正在等待来自模型类的数组列表,我该如何填充列表视图?
public BookAdapter(Context context, List<Book> list) {
this.context = context;
this.list = list;
}
我正在添加我的 ResponseListModel 模型类
public class ResponseListModel {
private boolean success;
private String message;
private JSONArray list;
private JSONObject object;
public ResponseListModel(String pObjetc) {
try {
JSONObject object = new JSONObject(pObjetc);
this.message = object.getString("message");
this.success = object.getBoolean("success");
//response.setMessage(object.optString("message"));
String strModel = object.getString("strModel");
String type = object.optString("type");
if (type.equals("array")) {
this.list = object.getJSONArray("model");// new JSONArray(strModel);
} else
object = object.getJSONObject("model");
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMessage() {
return message;
}
public JSONArray getList() {
return list;
}
public JSONObject getObject() {
return object;
}
public void setMessage(String message) {
this.message = message;
}
public void setList(JSONArray list) {
this.list = list;
}
public void setObject(JSONObject object) {
this.object = object;
}
}
更具体地说,我需要在我的 main 这条线上得到帮助
adapter = new BookAdapter(this, books);
【问题讨论】:
-
您必须将
response中的字符串解析为Book的数组或列表。我不知道这门课ResponseListModel,但它似乎可以完成这项工作。因此,可能有一些方法,如getBody()、getModel()或getResponse()可以从responseListModel实例调用,它应该返回您需要的列表/数组。也许你也必须做一些演员。 -
我添加了 responselistmodel 类,也许你可以帮帮我?
-
但是这个类是你自己创建的还是某个库类?
-
@DiegoMagdaleno 我创建了它
-
所以,如果你想保持这个策略,你现在应该实现一个 json 解析器来将你的字符串转换为对象。看看这个教程:tutorialspoint.com/android/android_json_parser.htm - 但我应该说这不是最好的方法。有很多不错的解析器可用,例如 jackson 或 gson。