【问题标题】:Android Volley Convert JSONArray to ArrayList<MyObject>Android Volley 将 JSONArray 转换为 ArrayList<MyObject>
【发布时间】:2023-03-27 06:43:01
【问题描述】:

我有 JsonObject

JSON Object

我有返回 JSONArray 的方法。我想传递第一个字段并只获取数据数组。然后将其投射到我的数组列表中。我真的很感谢你的任何建议。

  void getUsersBeacons(){
    type = new TypeToken<List<Beacon>>(){}.getType();
    JSONArray myReq = new JSONArray(Request.Method.GET, Url + testId + Url2, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            try{
            JSONArray buffArray = response.getJSONArray(2);
               JSONArray bufJsonArray = response.getJSONArray(1);
                beaconsList = converter.fromJson(bufJsonArray.toString(), type);
            }catch (Exception e){
                e.printStackTrace();
            }
        }


    });
    VolleySingleton.getInstance(getActivity().getApplicationContext()).addToRequestQueue(myReq);
}

信标类:

public class Beacon {

private Object idBeacon;
private String friendlyName;
private String imageUrl;

public Beacon(Object idBeacon, String friendlyName, String imageUrl) {
    this.idBeacon = idBeacon;
    this.friendlyName = friendlyName;
    this.imageUrl = imageUrl;
}

public Object getIdBeacon() {
    return idBeacon;
}

public void setIdBeacon(Object idBeacon) {
    this.idBeacon = idBeacon;
}

public String getFriendlyName() {
    return friendlyName;
}

public void setFriendlyName(String friendlyName) {
    this.friendlyName = friendlyName;
}

public String getImageUrl() {
    return imageUrl;
}

public void setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
}

}

【问题讨论】:

    标签: java android gson android-volley


    【解决方案1】:

    如果我理解正确,你最好传入 JSONArray 而不是字符串并解析它的内容,如下所示:

    public static List<Beacon> fromJson(JSONArray array)
    {
      ArrayList<Beacon> res = new ArrayList<>();
      for (int i = 0; i < array.length(); ++i)
      {
        JSONObject beacon = array.getJSONObject(i);
        res.add(new Beacon(beacon.getInt("beaconId"), beacon.getString("name"), beacon.getString("imageUrl"))));
      }
    
      return res;
    }
    

    UPD:在回复您的评论时,您必须使用Response.Listener&lt;JSONObject&gt; 而不是Response.Listener&lt;JSONArray&gt;,然后执行以下操作:

    public void onResponse(JSONObject response)
    {
      JSONArray array = response.getJSONArray("data");
      converter.fromJson(array);
    }
    

    【讨论】:

    • 是的,但我一遍又一遍地遇到同样的错误imgur.com/shHyTgD
    • JSONArray bufJsonArray = response.getJSONArray(1); fromJson(bufJsonArray);
    • 我已经成功了
    • 您正在尝试获取数组而不是对象,这就是您收到错误的原因。尝试改用getJSONObject()
    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 2015-07-30
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2011-06-18
    相关资源
    最近更新 更多