简体   繁体   English

如何在RecyclerView中显示Firebase数据库的变量“名称”和“值”

[英]How to display a variable 'name' and 'value' of firebase database in a RecyclerView

Fetching Data: 提取数据:

    private void fetchResults() {
    mDatabaseReference.child("Users").child(id).child("Quiz").child("Results").child(id).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot resultSnapshot: dataSnapshot.getChildren()) {
                String user = resultSnapshot.getKey();
                String score = resultSnapshot.getValue(String.class);
                Results results = new Results(user, score);
                resultsList.add(results);
            }
            mAdapter.notifyDataSetChanged();

                    }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });
}

Saving Data: 保存数据:

 String name = RecieversName;
                HashMap<String, String> userMap = new HashMap<>();
                userMap.put(name, String.valueOf(mScore));
                mRef.child("Users").child(RecieversId).child("Quiz").child("Results").child(UID).setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            Intent intent = new Intent(TakingQuiz.this, TakingQuizDone.class);
                            intent.putExtra("RecieversId",RecieversId);
                            intent.putExtra("Score", mScore.toString());
                            startActivity(intent);
                            finish();
                        }
                    }
                });

Adapter: 适配器:

public class AdapterQuiz extends RecyclerView.Adapter<AdapterQuiz.ResultViewHolder>{

private FirebaseAuth mAuth;
private List<Results> mResultsList;

public AdapterQuiz(List<Results>mResultsList)

    {
    this.mResultsList = mResultsList;
    }

public class ResultViewHolder extends RecyclerView.ViewHolder{
public TextView name;
public TextView score;
public ResultViewHolder(View view)
{
    super(view);
    name = (TextView)view.findViewById(R.id.name);
    score = (TextView)view.findViewById(R.id.score);
}
}
@Override
public ResultViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
    View V = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_activity_results,parent,false);
    mAuth = FirebaseAuth.getInstance();
    return new ResultViewHolder(V);
}


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

    Results results = mResultsList.get(position);

    holder.name.setText(results.getName());
    holder.score.setText(results.getScore());
}


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

}

Results Class 结果类

public class Results {
private String Name;
private String Score;

public Results() {
}

public Results(String Name, String Score) {
    this.Name = Name;
    this.Score = Score;
}

public String getName() {
    return Name;
}

public void setName(String name) {
    Name = name;
}

public String getScore() {
    return Score;
}

public void setScore(String score) {
    Score = score;
}

} }

I have worked quite sometime on RecyclerView and Firebase but usually I would display a constant 'name' and a variable 'value' but here both name and variable is not decided by me... when the user finishes the quiz and his score will be displayed in the recyclerview but its just showing blank without any error... I'm not sure if this is the right way of fetching this kind of data... can anyone help me out please 我已经有一段时间在RecyclerView和Firebase上工作了,但是通常我会显示一个常量“名称”和一个变量“值”,但是这里的名称和变量都不由我决定...当用户完成测验时,他的分数将是显示在recyclerview中,但显示为空白而没有任何错误...我不确定这是否是获取此类数据的正确方法...任何人都可以帮帮我吗

Database - https://ibb.co/eMWkFJ 数据库-https: //ibb.co/eMWkFJ

Results results;
String name, score;
private void fetchResults() {
    mDatabaseReference.child("Users").child(id).child("Quiz").child("Results").child(id).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
             for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
                 name = childDataSnapshot.getKey().toString();
                 score = childDataSnapshot.child(name).getValue());
                 results = new Results(user, score);
                 resultsList.add(results);
                 mAdapter.notifyDataSetChanged();
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });
}

I hope this will do your job. 我希望这能做好您的工作。

To solve this, you first need to set the adapter before notifying it for changes. 要解决此问题,您首先需要设置适配器,然后再通知其更改。 So please use the following line of code: 因此,请使用以下代码行:

mRecyclerView.setAdapter(mAdapter);

Instead of this: 代替这个:

mAdapter.notifyDataSetChanged();

This last line of code should be used only when some changes take place in your database and in order to notify the adapter, this must be set in the fist place. 仅当数据库中发生某些更改时才应使用最后一行代码,并且为了通知适配器,必须在第一位置进行设置。

暂无
暂无

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

相关问题 在这种情况下,如何在 RecyclerView 中显示 Firebase 数据库的子值? - How to display child values of Firebase Database in RecyclerView for this case? 如何从 firebase 数据库中混洗一个值以及如何显示 recyclerView? - How to shuffle a value from firebase database and how to show recyclerView? 如何在Android RecyclerView中显示Firebase Firestore用户? - How to display Firebase Firestore users in Android RecyclerView? 如何使用Android Firebase-realtime-database中的CardView在RecyclerView中显示数据? - How to display data in RecyclerView with CardView from Android firebase-realtime-database? 如何创建可变的 Firebase 数据库名称? - How do i create a variable firebase database name? 如何使用 firebase 数据库在 recyclerview 中打开新活动 - How to open new activity in recyclerview with firebase database 通过单击 Recyclerview 中的 CardView 显示存储在 Firebase 数据库中的 word 文件的内容 - Display contents of a word file that is stored in Firebase database by clicking a CardView in a Recyclerview Firebase无法显示实时数据库中的名称 - Firebase unable to display name from realtime database 如何尝试在RecyclerView中检索值我尝试了很多,但是在Android中将数据库中的数据推送到Firebase后,它从Firebase的ID中检索了空值 - How to Retrieve Value in RecyclerView I tried a lot but it Retrieve a Null Value from Generated ID by Firebase after Push Data in Database in Android 如何使用未知节点将 Firebase 数据库的值显示到 firebase 回收视图? - How to display value form Firebase database to the firebase recycle view, with unknowns node?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM