【问题标题】:Implement JSON object with Recyclerview using Volly使用 Volley 使用 Recyclerview 实现 JSON 对象
【发布时间】:2018-06-05 13:46:13
【问题描述】:

我无法使用 recylerview 获取此 Json 对象数据。

{"0":{"id":"1","images":"acar.jpg","name":"maruti","rating":"45"},"1":{" id":"2","images":"bcar.jpg","name":"bmw","rating":"55"},"2":{"id":"3","images" :"ccar.jpg","name":"swift","rating":"46"},"3":{"id":"4","images":"dcar.jpeg","name" :"duster","rating":"56"},"4":{"id":"5","images":"ecar.jpg","name":"audi","rating":" 58"},"成功":1}

片段.class

 View view = inflater.inflate(R.layout.fragment_fragment_first, container, false);
    final RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycleview);
    RecyclerView.LayoutManager lm = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(lm);
    recyclerView.setHasFixedSize(true);
    RequestQueue requestQueue = Volley.newRequestQueue(getContext());

    StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONObject jsonObject=new JSONObject(response);
                Log.e(TAG,response);
                for(int i=0;i<jsonObject.length();i++){
                    DataModel dataModel=new DataModel();
                    dataModel.setName(jsonObject.getString("name"));
                    dataModel.setRating(jsonObject.getString("rating"));
                    data.add(dataModel);
                    adapter=new CustomAdapter(data,getContext());
                }
                recyclerView.setAdapter(adapter);
            } catch (JSONException e) {
                e.printStackTrace();
                Toast.makeText(getContext(),
                        "Error: " + e.getMessage(),
                        Toast.LENGTH_LONG).show();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });
    requestQueue.add(stringRequest);


    // Inflate the layout for this fragment
    return view;
}

我的数据模型类

public class DataModel {
private String images;
private String name;
private String rating;
public DataModel(String images, String name, String rating) {
    this.images = images;
    this.name = name;
    this.rating = rating;
}
public  DataModel(){
}
public String getImages() {
    return images;
}

public void setImages(String images) {
    this.images = images;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getRating() {
    return rating;
}

public void setRating(String rating) {
    this.rating = rating;
}

【问题讨论】:

    标签: android json web-services android-fragments geojson


    【解决方案1】:

    你的解析器是错误的。而且您在错误的位置创建适配器(您永远不会在循环内创建适配器)。使用下面的代码。

     try {
            JSONObject resObject = new JSONObject(jsonString);
            Iterator<String> iterator = resObject.keys();
            while (iterator.hasNext()) {
                JSONObject inner = resObject.getJSONArray(iterator.next());
                DataModel dataModel=new DataModel();
                dataModel.setName(inner.getString("name"));
                dataModel.setRating(inner.getString("rating"));
                data.add(dataModel);
            }
            adapter=new CustomAdapter(data,getContext());
            recyclerView.setAdapter(adapter);
        }catch (Exception e){
            e.printStackTrace();
        }
    

    【讨论】:

      【解决方案2】:

      试试这个,

       @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          ArrayList<DataModel> dataList=new ArrayList<DataModel>();
          View view = inflater.inflate(R.layout.fragment_fragment_first, container, false);
      
              RequestQueue rq = Volley.newRequestQueue(getActivity());
              String url = "...Your URL.....";
              StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
                  @Override
                  public void onResponse(String response) {
                       try {
                          JSONObject jsonObject = null;
                          jsonObject = new JSONObject(response);
                          Iterator<String> iterator = jsonObject.keys();
                          JSONArray jsonArray = new JSONArray();
                          while (iterator.hasNext()) {
                              String key = iterator.next();
                              jsonArray.put(jsonObject.get(key));
                          }
      
                          for (int i = 0; i < jsonArray.length()-1; i++) {
                            String Image=jsonArray.getJSONObject(i).getString("images");
                              String Name = jsonArray.getJSONObject(i).getString("name");
                              String Rating= jsonArray.getJSONObject(i).getString("rating");
                              Log.d("LOG","IMAGE :"+Image+"\tNAME"+Name+"\tRATING ="+Rating);
      
              DataModel dataModel=new DataModel();
              dataModel.setName(Name);
              dataModel.setRating(Rating);
              dataList.add(dataModel);
              }
      adapter=new CustomAdapter(dataList,getActivity());
      recyclerView.setAdapter(adapter);
                      } catch (JSONException e) {
                          e.printStackTrace();
      
                      }
      
                  }
              }, new Response.ErrorListener() {
                  @Override
                  public void onErrorResponse(VolleyError error) {
                      Log.d("RESPONSE", "Error [" + error + "]");
                  }
              });
              stringRequest.setRetryPolicy(new DefaultRetryPolicy(90000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
              rq.add(stringRequest);
          } 
      

      【讨论】:

      • 感谢先生的回答,现在把这些所有代码和其他代码我也放了不同类型的代码和模式,但我面临同样的错误---“没有连接适配器;跳过布局”
      猜你喜欢
      • 1970-01-01
      • 2019-01-20
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      相关资源
      最近更新 更多