填充:来自 json 的列表视图
Posted
技术标签:
【中文标题】填充:来自 json 的列表视图【英文标题】:populate: listview from json 【发布时间】: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。
【参考方案1】:
您必须将您的 json 数组响应反序列化为 java 对象的 arraylist。您可以使用默认的 Json android json package 或 gson library 来做到这一点。
然后,您可以为适配器提供您的 Book 类对象的数组列表。
更多详情可以参考json to recyclerview。
仅供参考:您应该使用更新版本的列表视图 Recyclerview
编码愉快......:)
【讨论】:
【参考方案2】:您必须将response
变量转换为java class
,您可以使用Gson
之类的类和注释。
您可以查看this page 并粘贴您的 JSON 以帮助您了解其结构。
【讨论】:
以上是关于填充:来自 json 的列表视图的主要内容,如果未能解决你的问题,请参考以下文章
每 2 秒刷新一次从 JSON 响应中填充的 listView