在Android中使用gson将数据设置到recyclerview中

时间:2018-12-28 11:11:28

标签: android json gson

我正在尝试通过此类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中设置vehicle_number和email

这是我的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) {

            }


        }

我的适配器类:

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

}

3 个答案:

答案 0 :(得分:0)

我认为您已经忘记在recyclerView上添加布局管理器,将其添加到这样的代码中

    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getBaseContext());
    recyclerView.setLayoutManager(mLayoutManager);
    VehiclesDriverAdpter acceptedRequestAdapter = new  VehiclesDriverAdpter(list);
    recyclerView.setAdapter  (acceptedRequestAdapter);

答案 1 :(得分:0)

尝试这个

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

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

答案 2 :(得分:0)

您将数据放入List<VehicleList> list列表中,但从List<Vehicle> list1中获取了数据; 您可以尝试(但前提是您在VehicleList中始终只有一项)

public VehiclesDriverAdpter(List<VehicleList> list) {
  if(!list.isEmpty()){
   this.list1 = list.get(0);
  }
 }