当前位置: 首页 > 知识库问答 >
问题:

我无法从Firebase中获取值并将它们以片段形式放入TextView中

赵钊
2023-03-14

在我的应用程序中,我创建了登录和注册页面,并将用户名和电子邮件保存到我的Firebase数据库中。我还用碎片做了底部导航。我想从Firebase中获取这些值(name,mail),并将其放到profile片段中的TextView中。当我尝试这个时,我的应用程序崩溃了。我怎样才能解决这个问题?

public class ProfileFragment extends Fragment {
    private FirebaseDatabase mFirebaseDatabase;
    private FirebaseAuth mAuth;
    private String userID;

    private TextView tName;
    private TextView tEmail;


    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View profileView = inflater.inflate(R.layout.fragment_profile, null);

        tName=profileView.findViewById(R.id.tv_name);
        tEmail=profileView.findViewById(R.id.tv_email);


        mAuth=FirebaseAuth.getInstance();
        mFirebaseDatabase=FirebaseDatabase.getInstance();
        final DatabaseReference myRef=mFirebaseDatabase.getReference("users");
        FirebaseUser user=mAuth.getCurrentUser();
        userID=user.getUid();

        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot ds: dataSnapshot.getChildren()){
                    User user=new User();
                    user.setUserName(ds.child(userID).getValue(User.class).getUserName());
                    user.setUserEmail(ds.child(userID).getValue(User.class).getUserEmail());

                    tName.setText(user.getUserName());
                    tEmail.setText(user.getUserEmail());
                }
            }

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

        return profileView;
    }
}

共有1个答案

狄高畅
2023-03-14

假设您的数据库结构类似于以下内容:

Firebase-root
   |
   --- users
         |
         --- uid
              |
              --- name: "John"
              |
              --- email: "john@email.com"

要打印姓名和电子邮件,请使用以下代码使用模型类:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        User user = dataSnapshot.getValue(User.class);
        String name = user.getUserName();
        tName.setText(name);
        String email = user.getUserEmail();
        tEmail.setText(email);
        Log.d("TAG", name + " / " + email);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);

如果您想使用String类更简单地打印它们,请使用以下代码:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String name = dataSnapshot.child("name").getValue(String.class);
        tName.setText(name);
        String email = dataSnapshot.child("email").getValue(String.class);
        tEmail.setText(email);
        Log.d("TAG", name + " / " + email);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);

在这两种情况下,输出都是:john/john@email.com

 类似资料:
  • 在我的应用程序中,我试图创建一个实时提要(如Instagram提要或Facebook提要),其中包含包含图像、标题、用户用户名等图像计数的帖子。我创建了一个片段,用于拍摄图片、添加标题并将其从位图转换为字符串。我可以成功地将这些帖子(对象)发布到firebase数据库,但从数据库中获取每篇帖子的值并将其添加到arraylist中是行不通的CameraFragment(为每篇帖子向数据库添加帖子值)

  • 我正在尝试将活动转换为片段。< code>runOnUiThread上的错误标记。关于过去: GoogleActivityV2从活动扩展而来。在类ExecuteTask中运行Nuithread。类ExecuteTask嵌套在活动上。 (运行正常)现在: GoogleActivityV2从片段扩展而来。在类ExecuteTask中运行Nuithread。类ExecuteTask嵌套在活动上。(run

  • 问题内容: 确实需要一些建议,不知道这里出了什么问题。 上下文:2个片段,每个片段都有一个Textview,主要活动有2个按钮和一个edittext 目的:在主活动的edittext框中键入hello,然后单击片段1的按钮,textview将变为hello。 问题: 在edittext中输入hello并单击按钮1时,会遇到运行时错误。 Logcat: fragment_one.xml activi

  • 大家好,我得到了一个代码,我为我的项目,代码是得到心跳传感器的值从Arduino到我的android手机使用蓝牙。到目前为止,它进行得很好,它可以毫无问题地将价值发送到我的应用程序。但现在的问题是,我想得到它的值,这样我就可以用我的算法来处理它,但我现在似乎陷入了困境。

  • 如您所见,当按下按钮时,main activity运行“GetFromuser”函数。我想在该函数中获取edittext值。我该怎么做呢?

  • 我做错了什么? 这是我的XML文件。课文是德语的,我希望你能理解一切。否则请问我。