在android中使用gson将数据设置为recyclerview

在android中使用gson将数据设置为recyclerview,android,json,gson,Android,Json,Gson,我正试图从这种类型的json响应中设置recyclerview数据,但数据没有设置为recylerview 答复: { "vehicles": [ { "id": 1, "vehicle_number": "gj03fn3235", "driver_id": 4, "vehicle_type": "3", "admindata": { "id": 7,

我正试图从这种类型的
json
响应中设置recyclerview数据,但数据没有设置为recylerview

答复:

   {
    "vehicles": [
     {
        "id": 1,
        "vehicle_number": "gj03fn3235",
        "driver_id": 4,
        "vehicle_type": "3",

        "admindata": {
            "id": 7,
            "email": "chirag.pwt2@gmail.com"

        },
        "userdata": {
            "id": 4,
            "email": "keval.pwt@gmail.com"

        }
    },
    {
        "id": 2,
        "vehicle_number": "gj03fn3236",
        "driver_id": 4,
        "vehicle_type": "4",

        "admindata": {
            "id": 7,
            "email": "keval.pwt@gmail.com"

        },
        "userdata": {
            "id": 4,
            "email": "keval.pwt@gmail.com"

          }
      }
  ]
}
我已经创建了一个pojo响应类,但是我的数据没有成功地设置到recylerview api调用中,而是在
logcat
中打印响应。我尝试在recylerview中设置车辆号和电子邮件

以下是我的java代码:

   @Override
        public void onSuccess(int 
statusCode, Header[] headers, JSONObject 
response) {
            super.onSuccess(statusCode, 
     headers, response);

            try {
                Gson gson = new 
 GsonBuilder().create();

                List<VehicleList> list = 

   gson.fromJson(response.getJSONArray
   ("vehicles").toString(), new 
   TypeToken<List<VehicleList>>() {
                }.getType());

   Log.e("listsize",""+list.size());

                if (list.size() == 0) {

    txt_error.setVisibility(View.VISIBLE);

                } else {
                    VehiclesDriverAdpter 
  acceptedRequestAdapter = new 
  VehiclesDriverAdpter(list);
                    recyclerView.setAdapter
  (acceptedRequestAdapter);
  acceptedRequestAdapter.
  notifyDataSetChanged();
                }

            } catch (JSONException e) {

            }


        }
@覆盖
成功时的公共无效(int)
状态码,头[]头,JSONObject
(答复){
super.onSuccess(状态码,
标题、响应);
试一试{
Gson Gson=new
GsonBuilder().create();
列表=
fromJson(response.getJSONArray
(“车辆”).toString(),新
TypeToken(){
}.getType());
Log.e(“listsize”,“”+list.size());
if(list.size()==0){
txt_error.setVisibility(View.VISIBLE);
}否则{
汽车驾驶员
acceptedRequestAdapter=新
车辆驱动翼(列表);
recyclerView.setAdapter
(acceptedRequestAdapter);
acceptedRequestAdapter。
notifyDataSetChanged();
}
}捕获(JSONException e){
}
}
我的适配器类:

 public class VehiclesDriverAdpter extends 
  RecyclerView.Adapter<VehiclesDriverAdpter.Holder> {
 List<VehicleList> list;
 List<Vehicle> list1;
 FragmentActivity activity;

 public VehiclesDriverAdpter(List<VehicleList> list) {
    this.list = list;
 }



 @Override
 public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new 


 Holder(LayoutInflater.from(parent.getContext())
 .inflate(R.layout.adapter_vehicle, parent, false));
}

 @Override
 public void onBindViewHolder(final Holder holder, int position) {
    final Vehicle pojo1 = list1.get(position);

    Log.e("VehicleNumber",""+pojo1.getVehicleNumber());


    holder.txt_vehicle_number.setText(pojo1.getVehicleNumber());
    holder.txt_vehicle_driver_name.setText(pojo1.getUserdata().getEmail());
    holder.drivername.setText(pojo.getDriver_name());




    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Bundle bundle = new Bundle();
            bundle.putSerializable("data", pojo1);
            VehiclesInfoFragment detailFragment = new 
    VehiclesInfoFragment();
            detailFragment.setArguments(bundle);
            ((HomeActivity) holder.itemView.getContext()).
    changeFragment(detailFragment, "Passenger Information");
        }
    });
    BookFont(holder, holder.txt_vehilce_type);
    BookFont(holder, holder.txt_vehicle_driver_name);
    BookFont(holder, holder.txt_vehicle_driver_mobile_no);

    MediumFont(holder, holder.txt_vehicle_number);



}

@Override
public int getItemCount() {
    return list.size();
}

public class Holder extends RecyclerView.ViewHolder {



    TextView txt_vehicle_number, txt_vehilce_type, txt_vehicle_driver_name, 
    txt_vehicle_driver_mobile_no;
    CircleImageView img_driver;

    public Holder(View itemView) {
        super(itemView);

        txt_vehicle_number = (TextView) 
    itemView.findViewById(R.id.txt_vehicle_number);
        txt_vehilce_type = (TextView) 
    itemView.findViewById(R.id.txt_vehilce_type);
         txt_vehicle_driver_name = (TextView) 
   itemView.findViewById(R.id.txt_vehicle_driver_name);
        txt_vehicle_driver_mobile_no = (TextView) 
    itemView.findViewById(R.id.txt_vehicle_driver_mobile_no);

    }
}

   public void BookFont(Holder holder, TextView view1) {
    Typeface font1 = 
   Typeface.createFromAsset(holder.itemView.getContext().getAssets(), 
"font/AvenirLTStd_Book.otf");
    view1.setTypeface(font1);
}

   public void MediumFont(Holder holder, TextView view) {
    Typeface font = 
    Typeface.createFromAsset(holder.itemView.getContext().getAssets(), 
   "font/AvenirLTStd_Medium.otf");
    view.setTypeface(font);
}
public class vehiclesDrivesRadpter扩展
RecyclerView.适配器{
名单;
清单1;
碎片活动;
公共车辆驾驶员(列表){
this.list=列表;
}
@凌驾
public Holder onCreateViewHolder(视图组父级,int-viewType){
还新
Holder(LayoutInflater.from(parent.getContext())
.充气(右布局适配器/车辆,父级,假));
}
@凌驾
公共无效onBindViewHolder(最终持有人,内部位置){
最终车辆pojo1=列表1.get(位置);
Log.e(“VehicleNumber”,“”+pojo1.getVehicleNumber());
holder.txt_vehicle_number.setText(pojo1.getVehicleNumber());
holder.txt_vehicle_driver_name.setText(pojo1.getUserdata().getEmail());
holder.drivername.setText(pojo.getDriver_name());
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Bundle=新Bundle();
bundle.putSerializable(“数据”,pojo1);
VehiclesInfoFragment detailFragment=新
车辆信息片段();
detailFragment.setArguments(bundle);
((HomeActivity)holder.itemView.getContext()。
变更片段(detailFragment,“乘客信息”);
}
});
BookFont(holder,holder.txt\u vehilce\u类型);
BookFont(holder,holder.txt\车辆\驾驶员\姓名);
BookFont(holder,holder.txt\车辆\司机\手机\号码);
MediumFont(holder,holder.txt\u车辆号);
}
@凌驾
public int getItemCount(){
返回list.size();
}
公共类持有者扩展了RecyclerView.ViewHolder{
text查看txt车辆号、txt车辆类型、txt车辆名、司机名、,
txt\车辆\司机\手机\号码;
CircleImageView img_驱动程序;
公共持有人(查看项目视图){
超级(项目视图);
txt\车辆\编号=(文本视图)
itemView.findViewById(R.id.txt\u车辆号);
txt_vehilce_type=(文本视图)
findViewById(R.id.txt\u vehilce\u类型);
txt\车辆\驾驶员\姓名=(文本视图)
itemView.findViewById(R.id.txt\u车辆\u驾驶员\u姓名);
txt\车辆\驾驶员\手机\号码=(文本视图)
itemView.findViewById(R.id.txt\u车辆\u司机\u手机\u号码);
}
}
公共作废书籍字体(持有者,文本视图视图1){
字体font1=
Typeface.createFromAsset(holder.itemView.getContext().getAssets(),
“font/AvenirLTStd_Book.otf”);
视图1.设置字体(font1);
}
public void MediumFont(持有者,文本视图){
字体字体=
Typeface.createFromAsset(holder.itemView.getContext().getAssets(),
“font/AvenirLTStd_Medium.otf”);
view.setTypeface(字体);
}

}

我想你忘了在你的recyclerView上添加layout manager,在这样的代码中添加它

    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getBaseContext());
    recyclerView.setLayoutManager(mLayoutManager);
    VehiclesDriverAdpter acceptedRequestAdapter = new  VehiclesDriverAdpter(list);
    recyclerView.setAdapter  (acceptedRequestAdapter);
public VehiclesDriverAdpter(List<VehicleList> list) {
  if(!list.isEmpty()){
   this.list1 = list.get(0);
  }
 }
试试这个

YourActivity.this.runOnUiThread(new Runnable() {
         public void run() {
                 setRecyclerData();
         }
});

   private void setRecyclerData(){
        VehiclesDriverAdpter acceptedRequestAdapter = new VehiclesDriverAdpter(list);
        recyclerView.setAdapter(acceptedRequestAdapter);
        acceptedRequestAdapter.notifyDataSetChanged();
   }

您将数据放入
列表
列表,但从
列表1
获取数据; 您可以尝试(但只有在车辆列表中始终有一项的情况下)类似的操作

    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getBaseContext());
    recyclerView.setLayoutManager(mLayoutManager);
    VehiclesDriverAdpter acceptedRequestAdapter = new  VehiclesDriverAdpter(list);
    recyclerView.setAdapter  (acceptedRequestAdapter);
public VehiclesDriverAdpter(List<VehicleList> list) {
  if(!list.isEmpty()){
   this.list1 = list.get(0);
  }
 }
公共车辆驾驶员驾驶仪(列表){
如果(!list.isEmpty()){
this.list1=list.get(0);
}
}

你的版面是空白的吗?是的,我的版面是空白的layout@DharmiPatel如果您正在使用rxjava进行改装,请发布回收活动代码,然后在UI线程中执行最后一个通知代码,可能在RunUnuithReadi@Rahulchokshi编辑我的代码在假设什么已经实现和没有实现之前,在MainActivity中请求代码是一种更好的方法。是的,你是对的,但在Dharmi提供的代码中,它只有布局管理器与recyclerView之间的问题,由于他已经在主线程上的成功响应后更新视图,我不确定,但我假设他的codeCan您可以发布活动的完整代码吗?您得到的列表不是空的吗?因为在您的json中,第一个json对象缺少一些字段