在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对象缺少一些字段