我已完成登录页面和注册页面,我已经可以添加新数据了。我的问题出在我的个人资料页面上,它是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)
答案 0 :(得分:2)
您必须在firebase数据库中设置规则..
这会将您的数据库设置为公开,这样您就不会收到有关身份验证的错误。
{
"rules": {
".read": true,
".write": true
}
}
这会将您的数据库设置为仅通过firebase身份验证对用户进行身份验证,这样您就不会收到有关身份验证的错误。
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
有关详细信息,请参阅firebase文档..
答案 1 :(得分:0)
您需要创建这样的firebase用户实例以获取当前用户
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();