【问题标题】:I have issues fetching user data from Firebase and showing it in a TextView/EditText我从 Firebase 获取用户数据并在 TextView/EditText 中显示时遇到问题
【发布时间】:2018-01-01 21:43:11
【问题描述】:

Fragment 的 Oncreate

public class HomeScreen_Profile extends Fragment {
    EditText Name, Email, Status, Quote;
    private FirebaseAuth mAuth;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_profile, container, false);


        Name = (EditText) rootView.findViewById(R.id.Name);
        Email = (EditText) rootView.findViewById(R.id.Email);
        Status = (EditText) rootView.findViewById(R.id.Status);
        Quote = (EditText) rootView.findViewById(R.id.Quote);

        mAuth = FirebaseAuth.getInstance();
        loadUserInformation();
        return rootView;
    }
}

加载用户信息方法

public void loadUserInformation() {

    final String uid = mAuth.getCurrentUser().getUid();
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child(uid);
    DatabaseReference uidRef = rootRef.child("ref").child(uid);
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                SetUpProfileHelper obj = postSnapshot.getValue(SetUpProfileHelper.class);

                String UserName = obj.getName();
                String UserEmail = obj.getEmail();

                Name.setText(UserName);
                Email.setText(UserEmail);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(getActivity(), "Error Loading UserDetails", Toast.LENGTH_LONG).show();
        }
    };
    uidRef.addListenerForSingleValueEvent(eventListener);
}

为了检查工作,我在方法中只使用了 getName 和 getEmail。我保存用户信息没有问题,但是获取它让我很难,因为互联网上的所有教程都在获取它并在我不想要的 ListView 中显示它。有人能指出这段代码中的错误吗?

【问题讨论】:

  • 到底出了什么问题?
  • 数据未显示在 Edittexts 中
  • 添加日志并查看您是否正在获取任何内容或/并显示您的数据库
  • Log.d("TAG", obj.getName());添加了这行代码......我如何检查我是否正在获取数据。对不起,我还是个初学者
  • 在 android studio 的 logcat 中(屏幕底部)调试应用程序,当您到达此活动时,检查 logcat 中的 TAG 等于什么

标签: android database firebase firebase-realtime-database fetch


【解决方案1】:

位置错误,你在数据库中有这个:

  rootnode
        Users
           uid
            name:Userx
            email:userx@gmail.com
            phonenumber: number_here

并且您想获得nameemail

然后这样做:

public void loadUserInformation() {

final String uid = mAuth.getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("Users");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
     for(DataSnapshot postSnapshot: dataSnapshot.getChildren()){
            String name=postSnapshot.child("Name").getValue().toString(); 
            String email=postSnapsoht.child("Email").getValue().toString()

        }
    }

   @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(getActivity(), "Error Loading UserDetails", Toast.LENGTH_LONG).show();
    }
};
rootRef.addListenerForSingleValueEvent(eventListener);
}

由于uidUsers 节点下(所以直接child),并且由于您要检索uid,因此只需执行for 循环即可获取所需的数据。

【讨论】:

  • 天啊...老兄非常感谢您...终于这东西工作了...抱歉浪费了这么多时间...
猜你喜欢
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 2013-03-26
  • 2021-10-12
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多