简体   繁体   English

Recyclerview 无法从 Firebase 检索双重数据/值

[英]Recyclerview unable to retrieve double data/values from Firebase

I am having a hard time retrieving the accurate double data when implementing RecyclerView with FirebaseRecylerAdapter.在使用 FirebaseRecylerAdapter 实现 RecyclerView 时,我很难检索准确的双重数据。 To clarify my concern, I am receiving the correct double data but without the decimal value.为了澄清我的担忧,我收到了正确的双精度数据,但没有十进制值。 The double data display with whole numbers and zero decimals (ex. 100.0, 40.0, 23.0)双数据显示整数和零小数(例如 100.0、40.0、23.0)

Adapter class适配器 class

public class MyAdapter extends FirebaseRecyclerAdapter<UserDrive, MyAdapter.MyViewHolder> {

    public MyAdapter(@NonNull FirebaseRecyclerOptions<UserDrive> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull UserDrive model) {


        //double ma_ovScore = (double) Math.round(Double.valueOf(model.getOvScore())*100)/100;
        holder.adptr_ovScore.setText(String.valueOf(model.getOvScore()));
        Log.i("OvScore", ""+Double.parseDouble(String.valueOf(model.getOvScore())));
        holder.adptr_dateTime.setText(DateFormat.format("MM.dd.yyyy", new Date(model.getDateTime())).toString());

        holder.adptr_ovScore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AppCompatActivity activity = (AppCompatActivity) view.getContext();
                activity.getSupportFragmentManager().beginTransaction().replace(R.id.wrapper, new descFragment(model.getOvScore(),model.getDateTime(),model.getDistance(),model.getManualDistractionScore(),model.getsafeDrive(),model.gettexting(),model.gettalkPhone(),model.getoperatingRad(),model.getdrinking(),model.getreachBehind())).addToBackStack(null).commit();
            }
        });

    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.singlerowdesign,parent,false);
        return new MyViewHolder(view);
    }

    public class MyViewHolder extends RecyclerView.ViewHolder
    {
        TextView adptr_ovScore, adptr_dateTime;

        public MyViewHolder(@NonNull View itemView){
            super(itemView);

            adptr_ovScore = itemView.findViewById(R.id.new_ovScore);
            adptr_dateTime = itemView.findViewById(R.id.new_dateTime);
        }
    }
}

UserDrive class用户驱动器 class

public class UserDrive{
    public double ovScore=100.0;
    public double distance;

    public double manualDistractionScore;

    public long dateTime;

    //classes
    private double safeDrive;
    private double texting;
    private double talkPhone;
    private double operatingRad;
    private double drinking;
    private double reachBehind;

    public UserDrive() {
    }

    public UserDrive(double safeDrive, double texting, double talkPhone, double operatingRad, double drinking,
                     double reachBehind, double ovScore, double distance, double manualDistractionScore){
        this.safeDrive=safeDrive;
        this.texting=texting;
        this.talkPhone=talkPhone;
        this.operatingRad=operatingRad;
        this.drinking=drinking;
        this.reachBehind=reachBehind;

        this.ovScore=ovScore;
        this.distance=distance;
        this.manualDistractionScore=manualDistractionScore;
    }

    public double getOvScore(){

        return (double) ovScore;
    }

    public double getDistance(){
        return (double) distance;
    }

    public double getManualDistractionScore() {
        return manualDistractionScore;
    }

    public long getDateTime() {
        return dateTime;
    }

    public void setDateTime(long dateTime){
        this.dateTime=dateTime;
    }

    //getValueEachClass
    public double getsafeDrive(){return (double) safeDrive;}
    public double gettexting(){return (double) texting;}
    public double gettalkPhone(){return (double) talkPhone;}
    public double getoperatingRad(){return (double) operatingRad;}
    public double getdrinking(){return (double) drinking;}
    public double getreachBehind(){return (double) reachBehind;}

    public void setSafeDrive(double safeDrive) {
        this.safeDrive = safeDrive;
    }
    public void setTexting(double texting) {
        this.texting = texting;
    }
    public void setTalkPhone(double talkPhone) {
        this.talkPhone = talkPhone;
    }
    public void setOperatingRad(double operatingRad) {
        this.operatingRad = operatingRad;
    }
    public void setDrinking(double drinking) {
        this.drinking = drinking;
    }
    public void setReachBehind(double reachBehind) {
        this.reachBehind = reachBehind;
    }

    public void setManualDistractionScore(double manualDistractionScore) { this.manualDistractionScore = manualDistractionScore; }

    public void setOvScore(int ovScore){this.ovScore=ovScore;}

    public void deductOvScore(double deduct){
        this.ovScore=ovScore-deduct;
    }
}

firebase original value: firebase 原值:

火力原始值

log output:日志 output:

日志输出

the expected output should be the accurate double values, number with two-digit decimal (ex. 93.34, 92.13)预期的 output 应该是准确的双精度值,带两位小数的数字(例如 93.34、92.13)

The problem in your code lies in the fact that you're having an incorrect setter:您的代码中的问题在于您的设置器不正确:

public void setOvScore(int ovScore){this.ovScore=ovScore;}

The argument is of type int and not double, hence that behavior.参数是 int 类型而不是 double,因此是这种行为。 To solve this you have to change the type of the argument from int to double:要解决这个问题,您必须将参数的类型从 int 更改为 double:

public void setOvScore(double ovScore){this.ovScore=ovScore;}
//                      👆

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM