填充:来自 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

如何在加载视图控制器之前使用来自服务器/数据库的数据来显示视图控制器

如何使用来自 API 的 JSON 填充选择列表?

如何从 postgresql 视图表中获取要显示的对象列表

通过 JSON 将背景图像填充到列表视图项中的问题