Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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
Can';t将java.lang.String类型的对象转换为类型(Firebase、RecyclerView)_Java_Android_Firebase Realtime Database_Android Recyclerview - Fatal编程技术网

Can';t将java.lang.String类型的对象转换为类型(Firebase、RecyclerView)

Can';t将java.lang.String类型的对象转换为类型(Firebase、RecyclerView),java,android,firebase-realtime-database,android-recyclerview,Java,Android,Firebase Realtime Database,Android Recyclerview,此时,我在同一页面上有两个RecyclerView,分别是早餐和午餐RecyclerView,但我面临以下错误:无法将java.lang.String类型的对象转换为com.example类型 它突出了这条线 添加(ds.getValue(UserRecordsModel.class)) 我试过几种方法 但是当我使用这段代码时,来自不同记录的数据显示在早餐回收视图中 myRef = FirebaseDatabase.getInstance(). getReference

此时,我在同一页面上有两个RecyclerView,分别是早餐和午餐RecyclerView,但我面临以下错误:无法将java.lang.String类型的对象转换为com.example类型

它突出了这条线

添加(ds.getValue(UserRecordsModel.class))

我试过几种方法

但是当我使用这段代码时,来自不同记录的数据显示在早餐回收视图中

 myRef = FirebaseDatabase.getInstance().
            getReference("UsersRecords").child(FirebaseAuth.getInstance().getCurrentUser().getUid())
            .child(date_record);
这些是我的Firebase和我的应用程序的屏幕截图。您可以看到来自不同记录的两个数据都显示在同一个RecyclerView上

后来我尝试使用这个“新”代码作为数据库参考,假定从Firebase检索到的数据没有显示在早餐回收器视图上,我得到了无法将java.lang.String类型的对象转换为类型错误的

 myRef = FirebaseDatabase.getInstance().
            getReference("UsersRecords").child(FirebaseAuth.getInstance().getCurrentUser().getUid())
            .child(date_record).child("BreakfastRecord");
我想获取数据并将其显示在“假设”回收视图中。请帮忙

“我的计划餐”活动的以下代码:


    //BUTTON
    Button backBtn;
    Button addMealBreakBtn;
    Button addMealLunchBtn;
    Button addMealDinnerBtn;

    //DATABASE
    FirebaseAuth mAuth;
    FirebaseUser currentUser;
    DatabaseReference userRecordRef, myRef,requiredCalorieRef, mylunchRef;

    //TEXT VIEW
    TextView userRequiredCalorie;
    ArrayList<UserRecordsModel> userRecordslist;
    RecyclerView recyclerView, recyclerViewlunch;
    private RecyclerView.Adapter userRecordHolder;

   //DATE
    String date_record ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_plan_meal_user);

        date_record = new SimpleDateFormat("yyMMdd", Locale.getDefault()).format(new Date());
        //create a date string.
        String date_n = new SimpleDateFormat("MMM dd, yyyy", Locale.getDefault()).format(new Date());
        //get hold of textview.
        TextView date  = (TextView) findViewById(R.id.datePlanMeal);
        //set it as current date.
        date.setText(date_n);



        //INI VIEWS
        userRequiredCalorie= (TextView) findViewById(R.id.outputPlanMealCalorie);


        //FIREBASE AUTH
        mAuth = FirebaseAuth.getInstance();
        currentUser=mAuth.getCurrentUser();

        //DATABASE REFERENCE
        myRef = FirebaseDatabase.getInstance().
                getReference("UsersRecords").child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                .child(date_record);

        /*mylunchRef=FirebaseDatabase.getInstance().
                getReference("UsersRecords").child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                .child(date_record).child("LunchRecord");*/



        //myRef = FirebaseDatabase.getInstance().getReference("UsersRecords").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
        //mylunchRef = FirebaseDatabase.getInstance().getReference("UsersRecords").child(FirebaseAuth.getInstance().getCurrentUser().getUid());


        //RECYCLER VIEW
        //*********BREAKFAST******************************************//
        recyclerView = findViewById(R.id.userRecordRecylerView);
        LinearLayoutManager manager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(manager);
        recyclerView.setHasFixedSize(true);

        //ADAPTER
        userRecordslist = new ArrayList<>();
        userRecordHolder = new UserRecordsHolder(userRecordslist);
        recyclerView.setAdapter(userRecordHolder);

        //*********LUNCH******************************************//
        recyclerViewlunch = findViewById(R.id.userRecordRecylerViewLunch);
        LinearLayoutManager manager1 = new LinearLayoutManager(this);
        recyclerViewlunch.setLayoutManager(manager1);
        recyclerViewlunch.setHasFixedSize(true);

        //ADAPTER
        userRecordslist = new ArrayList<>();
        userRecordHolder = new UserRecordsHolder(userRecordslist);
        recyclerViewlunch.setAdapter(userRecordHolder);



        //BUTTON
        addMealBreakBtn = (Button) findViewById(R.id.addMealBreakBtn);
        backBtn = (Button)findViewById(R.id.backBtnPlan) ;


        //**********************DATABASE REFERENCE FOR USER REQUIRED CALORIE***************************//
        requiredCalorieRef = FirebaseDatabase.getInstance().getReference("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
        requiredCalorieRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


                String userCalorieSuggestion = String.valueOf((dataSnapshot.child("daily calorie").getValue()));
                userRequiredCalorie.setText((userCalorieSuggestion  +"kcal"));

                /*String userCalorieSuggestion = Double.toString((Double) dataSnapshot.child("daily calorie").getValue());
                showDailyCalorie.setText(("Daily Calorie Suggestion:  " + userCalorieSuggestion  +"kcal"));*/
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }

        });


        //BACK BUTTON*************************************************
        backBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent signIn = new Intent(PlanMealUser.this,HomepageUser.class);
                startActivity(signIn);
            }
        });


        //ADD MEAL BUTTONS**********************************************
        addMealBreakBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent breakfast = new Intent(PlanMealUser.this,ViewProduct.class);
                startActivity(breakfast);

            }
        });

        addMealLunchBtn = (Button) findViewById(R.id.addMealLunchBtn);
        addMealLunchBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent signIn = new Intent(PlanMealUser.this,ViewProduct_Lunch.class);
                startActivity(signIn);

            }
        });

        addMealDinnerBtn = (Button) findViewById(R.id.addMealDinnerBtn);
        addMealDinnerBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent signIn = new Intent(PlanMealUser.this,ViewProduct.class);
                startActivity(signIn);


            }
        });

    }


    @Override
    protected void onStart() {
        super.onStart();
        if (myRef != null) {
            myRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    if (dataSnapshot.exists()) {
                        userRecordslist = new ArrayList<>();
                        for (DataSnapshot ds : dataSnapshot.getChildren()) {
                            userRecordslist.add(ds.getValue(UserRecordsModel.class));



                        }
                        UserRecordsHolder userRecordHolder = new UserRecordsHolder(userRecordslist);
                        recyclerView.setAdapter(userRecordHolder);
                    }

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(PlanMealUser.this, databaseError.getMessage(),
                            Toast.LENGTH_SHORT).show();
                }
            });

        }
    }


}

这是我的适配器

public class UserRecordsHolder extends RecyclerView.Adapter<UserRecordsHolder.MyURHolder> {
    Context context;
    ArrayList<UserRecordsModel> userRecordslist;

    public UserRecordsHolder (ArrayList<UserRecordsModel> userRecordslist)
    {
        this.userRecordslist=userRecordslist;
    }

    @NonNull
    @Override
    public MyURHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_user_records, viewGroup,false);
        return new MyURHolder(view);

    }


    @Override
    public void onBindViewHolder(@NonNull MyURHolder myURHolder, int i) {
        myURHolder.foodName.setText(userRecordslist.get(i).getFoodName());
        myURHolder.foodCalorie.setText(userRecordslist.get(i).getFoodCalorie());
    }


    @Override
    public int getItemCount()
    {

        return userRecordslist.size();
    }

    class MyURHolder extends RecyclerView.ViewHolder
    {
        TextView foodName, foodCalorie;

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


            foodName = itemView.findViewById(R.id.userRecordsFName);
            foodCalorie = itemView.findViewById(R.id.userRecordsKcal);

        }

    }
}

公共类UserRecordsHolder扩展了RecyclerView.Adapter{ 语境; ArrayList用户记录列表; 公共用户记录文件夹(ArrayList userRecordslist) { this.userRecordslist=userRecordslist; } @非空 @凌驾 public MyURHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){ View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.row\u user\u记录,viewGroup,false); 返回新的MyURHolder(视图); } @凌驾 public void onBindViewHolder(@NonNull MyURHolder MyURHolder,int i){ myURHolder.foodName.setText(userRecordslist.get(i.getFoodName()); myURHolder.foodCalorie.setText(userRecordslist.get(i.getFoodCalorie()); } @凌驾 public int getItemCount() { 返回userRecordslist.size(); } 类MyURHolder扩展了RecyclerView.ViewHolder { TextView foodName、foodCalorie; 公共MyURHolder(@NonNull View itemView){ 超级(项目视图); foodName=itemView.findViewById(R.id.UserRecordsName); foodCalorie=itemView.findviewbyd(R.id.userRecordsKcal); } } }
希望有人能帮忙

您需要在早餐记录或午餐记录下再增加一级:

UserRecords
    UID
        Date
            BreakfastRecord
                1
                    foodCalorie
                    foodName
                2
                    foodCalorie
                    foodName
                3
                    foodCalorie
                    foodName

当您使用此行时,
myRef=FirebaseDatabase.getInstance()。getReference(“UsersRecords”).child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child(date_record).child(“BreakfastRecord”)预期结果是什么,一个单一的
foodCalorie
和一个单一的
foodName
,对吗?嗨,谢谢,它能工作。我真的忘记了RecyclerView的功能是显示多个数据。我用的不是数字,而是推送Id。非常感谢你们。我对你的答案投了赞成票
UserRecords
    UID
        Date
            BreakfastRecord
                1
                    foodCalorie
                    foodName
                2
                    foodCalorie
                    foodName
                3
                    foodCalorie
                    foodName