android - 使用 Volley 实现带有 Recyclerview 的 JSON 对象

标签 android json web-services android-fragments geojson

我无法使用 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"},"success":1}

fragment 类

 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;
}

最佳答案

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

 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();
    }

关于android - 使用 Volley 实现带有 Recyclerview 的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47949405/

相关文章:

java - 安卓GSON错误:Expected BEGIN_OBJECT but was NAME at line 1 column 61

Android:方向更改会删除对我的 ImageView 所做的修改

json - ContextualDeserializer,用于使用 Jackson 将 JSON 映射到不同类型的映射

ruby-on-rails - 在 as_json 中订购嵌套关联

c# - Visual Studio 使用 Runtime.Serialization 生成我的服务引用之一,但其他使用 ServiceModel 生成

java - Apache Camel RouteBuilder 配置方法

java - 如何创建特定尺寸的android studio布局文件夹?获取无效配置时出错 '1080x2340'

android 创建相册

java - JSONArray 无法转换为 JSONObject 异常

Java SAAJ 基本身份验证