Android - 从用户ID到底栏片段的Firebase数据

时间:2017-07-10 09:08:41

标签: android android-fragments firebase firebase-realtime-database firebase-authentication

我已完成登录页面和注册页面,我已经可以添加新数据了。我的问题出在我的个人资料页面上,它是roughike底栏的一部分。在我的个人资料标签上,这是一个片段。我想显示当前登录用户的全名。我的问题是,使用我当前的代码强行关闭应用程序。

以下是代码:

public class ProfileFragment extends Fragment {

    private TextView userfullName;

    private FirebaseAuth firebaseAuth;

    DatabaseReference databaseProfile;

    public ProfileFragment() {

    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //Inflate the layout for this fragment

        View view = inflater.inflate(R.layout.fragment_profile, container, false);

        FirebaseUser user = firebaseAuth.getCurrentUser();
        String uid = user.getUid();
        databaseProfile = FirebaseDatabase.getInstance().getReference("users").child(uid);

        databaseProfile.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String fullname = (String) dataSnapshot.child("fullname").getValue();
                userfullName.setText(fullname);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        return view;
    }
}

更新: 这是日志。

07-10 17:26:59.773 31429-31429/? E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.lightupstudio.friendler, PID: 31429
                                               java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.auth.FirebaseUser com.google.firebase.auth.FirebaseAuth.getCurrentUser()' on a null object reference
                                                   at com.lightupstudio.friendler.fragment.ProfileFragment.onCreateView(ProfileFragment.java:51)
                                                   at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)
                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
                                                   at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
                                                   at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
                                                   at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
                                                   at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
                                                   at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
                                                   at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
                                                   at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710)
                                                   at android.os.Handler.handleCallback(Handler.java:751)
                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                   at android.os.Looper.loop(Looper.java:159)
                                                   at android.app.ActivityThread.main(ActivityThread.java:6139)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

2 个答案:

答案 0 :(得分:2)

您必须在firebase数据库中设置规则..

这会将您的数据库设置为公开,这样您就不会收到有关身份验证的错误。

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

这会将您的数据库设置为仅通过firebase身份验证对用户进行身份验证,这样您就不会收到有关身份验证的错误。

{ 
  "rules": { 
      "users": { 
          "$uid": { 
                ".read": "$uid === auth.uid", 
                ".write": "$uid === auth.uid" 
           } 
       } 
    } 
 }

有关详细信息,请参阅firebase文档..

Check this link

答案 1 :(得分:0)

您需要创建这样的firebase用户实例以获取当前用户

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();