使用 Volley 使用 Recyclerview 实现 JSON 对象
Posted
技术标签:
【中文标题】使用 Volley 使用 Recyclerview 实现 JSON 对象【英文标题】:Implement JSON object with Recyclerview using Volly 【发布时间】: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;
【问题讨论】:
【参考方案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);
【讨论】:
感谢先生的回答,现在把这些所有代码和其他代码我也放了不同类型的代码和模式,但我面临同样的错误---“没有连接适配器;跳过布局”以上是关于使用 Volley 使用 Recyclerview 实现 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章
java - 如何使用Java中的Volley库将JSON api数据放入recyclerview?
使用 Volley / RecyclerView 从按钮单击的 JSON 中提取新信息
如何通过 Volley 获取数据实现具有两个或多个不同卡片视图的 RecyclerView?
Androiid_Volley+Image-Loader+RecyclerView实现网络下载图片瀑布流