【问题标题】:populate: listview from json填充:来自 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。

标签: android json listview


【解决方案1】:

您必须将您的 json 数组响应反序列化为 java 对象的 arraylist。您可以使用默认的 Json android json packagegson library 来做到这一点。

然后,您可以为适配器提供您的 Book 类对象的数组列表。

更多详情可以参考json to recyclerview

仅供参考:您应该使用更新版本的列表视图 Recyclerview

编码愉快......:)

【讨论】:

    【解决方案2】:

    您必须将response 变量转换为java class,您可以使用Gson 之类的类和注释。

    您可以查看this page 并粘贴您的 JSON 以帮助您了解其结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      相关资源
      最近更新 更多