Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 解析嵌套的JSON值并在按日期排序时显示在recyclerview中_Android_Json_Retrofit2_Android Recyclerview - Fatal编程技术网

Android 解析嵌套的JSON值并在按日期排序时显示在recyclerview中

Android 解析嵌套的JSON值并在按日期排序时显示在recyclerview中,android,json,retrofit2,android-recyclerview,Android,Json,Retrofit2,Android Recyclerview,因此,我必须解析以下JSON并在两步回收器视图中显示数据,也就是说,在第一个屏幕上,应用程序应该只显示关联人员的姓名和金额 但是,如果我单击某个列表项,它也应该显示其余的数据 另外,我知道我必须为我的响应创建一个模型类,它实现了可比较的接口 此类将重写compareTo方法,该方法将根据transaction\u日期对事务进行排序。 但我无法理解整个过程,因为当我生成POJO类时,我得到了四个不同的java类(Transaction、Datum、Card、Associate)。当我为recyc

因此,我必须解析以下JSON并在两步回收器视图中显示数据,也就是说,在第一个屏幕上,应用程序应该只显示关联人员的姓名和金额

但是,如果我单击某个列表项,它也应该显示其余的数据

另外,我知道我必须为我的响应创建一个模型类,它实现了可比较的接口

此类将重写
compareTo
方法,该方法将根据
transaction\u日期对事务进行排序。
但我无法理解整个过程,因为当我生成POJO类时,我得到了四个不同的java类(Transaction、Datum、Card、Associate)。当我为recyclerview创建适配器时,我无法直接访问
“amount”
字段,因为它存在于另一个类中

{
    "status": "success",
    "status_code": "200",
    "data": [
        {
            "transaction_id": "2",
            "transaction_date": "2018-04-19 05:27:23.0",
            "amount": "200.00",
            "user_id": "2",
            "currency": "MXN",
            "associate_id": "1",
            "associate": {
                "is_active": "N",
                "associate_type": "Autoservicio",
                "name": "alsuper",
                "created_date": "12-Feb-2018 07:31:58 AM",
                "associate_id": "1",
                "url": null,
                "last_update_date": "12-Feb-2018 07:31:58 AM"
            },
            "card_id": "2",
            "card": {
                "bank_code": "002",
                "is_active": "Y",
                "allows_charges": "Y",
                "card_number": "411111XXXXXX1111",
                "openpay_card_id": "kiusphu8moqri6qys7sg",
                "type": "debit",
                "card_id": "2",
                "expiration_year": "21",
                "user_id": "2",
                "expiration_month": "10",
                "bank_name": "bank name",
                "created_date": "21-Mar-2018 05:46:58 AM",
                "brand": "visa",
                "last_update_date": "21-Mar-2018 05:46:58 AM",
                "holder_name": "name name name name"
            }
        }
   ]
}
我很高兴分享适配器类,现在我没有分享是因为我想对这个问题有一些新的看法

更新1

因此,在应用Raja Jawahar的解决方案后,我可以运行一次,但在进行了最后的更改之后,出现了以下情况

D/1: Loaded View
D/2: Loaded recycler View
I/art: Do partial code cache collection, code=22KB, data=30KB
       After code cache collection, code=22KB, data=30KB
       Increasing code cache capacity to 128KB
D/OkHttp: --> GET http://URL http/1.1
          --> END GET
E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException:  (No such file or directory)
W/ImageView: resolveUri failed on bad bitmap uri: 
D/OkHttp: <-- 200  http:URL (757ms)
          Access-Control-Allow-Origin: *
          Access-Control-Allow-Headers: Content-Type, Accept, X-Requested-With
          Content-Type: application/json
          Content-Length: 4109
D/OkHttp: Date: Sun, 15 Jul 2018 13:42:20 GMT
D/OkHttp: {"status":"success","status_code":"200","data": DATA]}
          <-- END HTTP (4109-byte body)
D/6: Passing to Adapter Failure
     java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
D/1:已加载视图
D/2:已加载的回收器视图
I/art:进行部分代码缓存收集,代码=22KB,数据=30KB
收集代码缓存后,代码=22KB,数据=30KB
将代码缓存容量增加到128KB
D/OkHttp:-->获取http://URL http/1.1
-->结束
E/BitmapFactory:无法解码流:java.io.FileNotFoundException:(无此类文件或目录)
W/ImageView:resolveUri在错误的位图uri上失败:
D/OkHttp:使用DTO生成器(Android插件创建模型类)

为您的响应创建一个如下所示的类

public class DataModel {

  @SerializedName("data")   private List<Data> data;   @SerializedName("status_code")   private String status_code;   @SerializedName("status")   private String status;
     public static class Data {
    @SerializedName("card")
    private Card card;
    @SerializedName("card_id")
    private String card_id;
    @SerializedName("associate")
    private Associate associate;
    @SerializedName("associate_id")
    private String associate_id;
    @SerializedName("currency")
    private String currency;
    @SerializedName("user_id")
    private String user_id;
    @SerializedName("amount")
    private String amount;
    @SerializedName("transaction_date")
    private String transaction_date;
    @SerializedName("transaction_id")
    private String transaction_id;   }

  public static class Card {
    @SerializedName("holder_name")
    private String holder_name;
    @SerializedName("last_update_date")
    private String last_update_date;
    @SerializedName("brand")
    private String brand;
    @SerializedName("created_date")
    private String created_date;
    @SerializedName("bank_name")
    private String bank_name;
    @SerializedName("expiration_month")
    private String expiration_month;
    @SerializedName("user_id")
    private String user_id;
    @SerializedName("expiration_year")
    private String expiration_year;
    @SerializedName("card_id")
    private String card_id;
    @SerializedName("type")
    private String type;
    @SerializedName("openpay_card_id")
    private String openpay_card_id;
    @SerializedName("card_number")
    private String card_number;
    @SerializedName("allows_charges")
    private String allows_charges;
    @SerializedName("is_active")
    private String is_active;
    @SerializedName("bank_code")
    private String bank_code;   }

  public static class Associate {
    @SerializedName("last_update_date")
    private String last_update_date;
    @SerializedName("associate_id")
    private String associate_id;
    @SerializedName("created_date")
    private String created_date;
    @SerializedName("name")
    private String name;
    @SerializedName("associate_type")
    private String associate_type;
    @SerializedName("is_active")
    private String is_active;   } }
公共类数据模型{
@SerializedName(“数据”)私有列表数据;@SerializedName(“状态代码”)私有字符串状态代码;@SerializedName(“状态”)私有字符串状态;
公共静态类数据{
@序列化名称(“卡”)
私人卡;
@序列化名称(“卡id”)
私人串卡(id);;
@序列化名称(“关联方”)
私人助理;
@SerializedName(“关联方id”)
私有字符串关联_id;
@序列化名称(“货币”)
私人字符串货币;
@SerializedName(“用户id”)
私有字符串用户标识;
@序列化名称(“金额”)
私有字符串数量;
@SerializedName(“交易日”)
私有字符串交易日;
@SerializedName(“事务id”)
私有字符串事务_id;}
公共静态类卡{
@序列化名称(“持有人名称”)
私有字符串持有者名称;
@SerializedName(“上次更新日期”)
私有字符串上次更新日期;
@序列化名称(“品牌”)
自有品牌;
@SerializedName(“创建日期”)
创建日期的私有字符串;
@序列化名称(“银行名称”)
私有字符串银行名称;
@序列化名称(“到期月份”)
私有字符串到期日为个月;
@SerializedName(“用户id”)
私有字符串用户标识;
@序列化名称(“到期年”)
私人字符串过期时间为一年;
@序列化名称(“卡id”)
私人串卡(id);;
@序列化名称(“类型”)
私有字符串类型;
@序列化名称(“openpay\u卡\u id”)
私有字符串openpay\u卡\u id;
@序列化名称(“卡号”)
专用字符串卡号;
@SerializedName(“允许收取费用”)
私人字符串允许_收费;
@SerializedName(“是否处于活动状态”)
私有字符串处于活动状态;
@序列化名称(“银行代码”)
专用字符串bank_code;}
公共静态类助理{
@SerializedName(“上次更新日期”)
私有字符串上次更新日期;
@SerializedName(“关联方id”)
私有字符串关联_id;
@SerializedName(“创建日期”)
创建日期的私有字符串;
@序列化名称(“名称”)
私有字符串名称;
@SerializedName(“关联类型”)
私有字符串类型;
@SerializedName(“是否处于活动状态”)
私有字符串处于活动状态;}}
在适配器中访问数据模型,如下所示

package com.mobieadz.sales;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;

public class MyRecylerViewAdapter extends RecyclerView.Adapter<MyRecylerViewAdapter.MyViewHolder> {

  private Context context;
  private List<Data> datas = new ArrayList<>();

  @NonNull @Override
  public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
      int viewType) {
    return null;
  }

  public MyRecylerViewAdapter(Context context, List<DataModel> dataModels) {
    this.context = context;
    this.dataModels = dataModels;
  }

  @Override
  public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

   Data data = datas.get(position);
    youtextView.setText(data.amount);
    yourtextView.setText(data.associate.name)
    yourtextView.setText(data.associate.name)

  }

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

  public class MyViewHolder extends RecyclerView.ViewHolder {

    public MyViewHolder(View itemView) {
      super(itemView);
    }
  }
}
package com.mobieadz.sales;
导入android.content.Context;
导入android.support.annotation.NonNull;
导入android.support.v7.widget.RecyclerView;
导入android.view.view;
导入android.view.ViewGroup;
导入java.util.ArrayList;
导入java.util.List;
公共类MyRecylerViewAdapter扩展了RecyclerView.Adapter{
私人语境;
私有列表数据=新的ArrayList();
@非空@覆盖
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,
int视图类型){
返回null;
}
公共MyRecylerViewAdapter(上下文,列表数据模型){
this.context=上下文;
this.dataModels=数据模型;
}
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder,int位置){
数据=数据获取(位置);
youtextView.setText(data.amount);
yourtextView.setText(data.associate.name)
yourtextView.setText(data.associate.name)
}
@重写公共int getItemCount(){
返回dataModels.size();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
公共MyViewHolder(查看项目视图){
超级(项目视图);
}
}
}

一定会尝试,并让您知道!让我知道,如果你有任何问题Siddhant GhoshHappy编码@SiddhantGhosh@SiddhantGhosh我认为您的事务类有问题。。你能把交易记录邮寄给我们吗。
public class TransactionsAdapter extends RecyclerView.Adapter<TransactionsAdapter.MyViewHolder>{
    private Context context;
    private List <Transactions> TransactionsList;


    public TransactionsAdapter(Context context, List<Transactions> TransactionsList) {
        this.context = context;
        this.TransactionsList = TransactionsList;
    }

    public void setTransactionsList(List<Transactions> transactionsList){
        this.TransactionsList = transactionsList;

        notifyDataSetChanged();
    }

    @Override
    public TransactionsAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    }

    @Override
    public void onBindViewHolder(TransactionsAdapter.MyViewHolder holder, int position) {
        Transactions transactionsList = TransactionsList.get(position);
        Transactions.DataEntity dataEntity = transactionsList.getData().get(0);
        holder.associateName.setText(dataEntity.getAssociate().getName());
    }

    @Override
    public int getItemCount() {
        return 0;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder{

        public MyViewHolder(View itemView) {
            super(itemView);
        }
    }
}
public class Transactions {

@SerializedName("data")
private List<DataEntity> data;
@SerializedName("status_code")
private String statusCode;
@SerializedName("status")
private String status;

public List<DataEntity> getData() {
    return data;
}

public void setData(List<DataEntity> data) {
    this.data = data;
}

public String getStatusCode() {
    return statusCode;
}

public void setStatusCode(String statusCode) {
    this.statusCode = statusCode;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public static class DataEntity {
    @SerializedName("card")
    private CardEntity card;
    @SerializedName("card_id")
    private String cardId;
    @SerializedName("associate")
    private AssociateEntity associate;
    @SerializedName("associate_id")
    private String associateId;
    @SerializedName("currency")
    private String currency;
    @SerializedName("user_id")
    private String userId;
    @SerializedName("amount")
    private String amount;
    @SerializedName("transaction_date")
    private String transactionDate;
    @SerializedName("transaction_id")
    private String transactionId;
}

public static class CardEntity {
    @SerializedName("holder_name")
    private String holderName;
    @SerializedName("last_update_date")
    private String lastUpdateDate;
    @SerializedName("brand")
    private String brand;
    @SerializedName("created_date")
    private String createdDate;
    @SerializedName("bank_name")
    private String bankName;
    @SerializedName("expiration_month")
    private String expirationMonth;
    @SerializedName("user_id")
    private String userId;
    @SerializedName("expiration_year")
    private String expirationYear;
    @SerializedName("card_id")
    private String cardId;
    @SerializedName("type")
    private String type;
    @SerializedName("openpay_card_id")
    private String openpayCardId;
    @SerializedName("card_number")
    private String cardNumber;
    @SerializedName("allows_charges")
    private String allowsCharges;
    @SerializedName("is_active")
    private String isActive;
    @SerializedName("bank_code")
    private String bankCode;
}

public static class AssociateEntity {
    @SerializedName("last_update_date")
    private String lastUpdateDate;
    @SerializedName("associate_id")
    private String associateId;
    @SerializedName("created_date")
    private String createdDate;
    @SerializedName("name")
    private String name;
    @SerializedName("associate_type")
    private String associateType;
    @SerializedName("is_active")
    private String isActive;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public class DataModel {

  @SerializedName("data")   private List<Data> data;   @SerializedName("status_code")   private String status_code;   @SerializedName("status")   private String status;
     public static class Data {
    @SerializedName("card")
    private Card card;
    @SerializedName("card_id")
    private String card_id;
    @SerializedName("associate")
    private Associate associate;
    @SerializedName("associate_id")
    private String associate_id;
    @SerializedName("currency")
    private String currency;
    @SerializedName("user_id")
    private String user_id;
    @SerializedName("amount")
    private String amount;
    @SerializedName("transaction_date")
    private String transaction_date;
    @SerializedName("transaction_id")
    private String transaction_id;   }

  public static class Card {
    @SerializedName("holder_name")
    private String holder_name;
    @SerializedName("last_update_date")
    private String last_update_date;
    @SerializedName("brand")
    private String brand;
    @SerializedName("created_date")
    private String created_date;
    @SerializedName("bank_name")
    private String bank_name;
    @SerializedName("expiration_month")
    private String expiration_month;
    @SerializedName("user_id")
    private String user_id;
    @SerializedName("expiration_year")
    private String expiration_year;
    @SerializedName("card_id")
    private String card_id;
    @SerializedName("type")
    private String type;
    @SerializedName("openpay_card_id")
    private String openpay_card_id;
    @SerializedName("card_number")
    private String card_number;
    @SerializedName("allows_charges")
    private String allows_charges;
    @SerializedName("is_active")
    private String is_active;
    @SerializedName("bank_code")
    private String bank_code;   }

  public static class Associate {
    @SerializedName("last_update_date")
    private String last_update_date;
    @SerializedName("associate_id")
    private String associate_id;
    @SerializedName("created_date")
    private String created_date;
    @SerializedName("name")
    private String name;
    @SerializedName("associate_type")
    private String associate_type;
    @SerializedName("is_active")
    private String is_active;   } }
package com.mobieadz.sales;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;

public class MyRecylerViewAdapter extends RecyclerView.Adapter<MyRecylerViewAdapter.MyViewHolder> {

  private Context context;
  private List<Data> datas = new ArrayList<>();

  @NonNull @Override
  public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
      int viewType) {
    return null;
  }

  public MyRecylerViewAdapter(Context context, List<DataModel> dataModels) {
    this.context = context;
    this.dataModels = dataModels;
  }

  @Override
  public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

   Data data = datas.get(position);
    youtextView.setText(data.amount);
    yourtextView.setText(data.associate.name)
    yourtextView.setText(data.associate.name)

  }

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

  public class MyViewHolder extends RecyclerView.ViewHolder {

    public MyViewHolder(View itemView) {
      super(itemView);
    }
  }
}