Android 具有Firebase身份验证的NullPointerException

Android 具有Firebase身份验证的NullPointerException,android,firebase,firebase-realtime-database,firebase-authentication,Android,Firebase,Firebase Realtime Database,Firebase Authentication,我正在做一个博客应用程序,但当我运行它时,我有以下崩溃代码: java.lang.RuntimeException:无法启动活动组件信息{com.fgfelectro.f/com.fgfelectro.f.MainActivity}:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String com.google.firebase.auth.FirebaseUser.getUid()” 我在网上搜索了好几天,都没有成功。我见过其他

我正在做一个博客应用程序,但当我运行它时,我有以下崩溃代码:

java.lang.RuntimeException:无法启动活动组件信息{com.fgfelectro.f/com.fgfelectro.f.MainActivity}:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String com.google.firebase.auth.FirebaseUser.getUid()”

我在网上搜索了好几天,都没有成功。我见过其他线程讨论这个问题,但没有解决任何问题。这是我的主要活动:

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;

public class MainActivity extends AppCompatActivity {

    private RecyclerView mBlogList;

    private DatabaseReference mDatabase;

    private DatabaseReference mDatabaseUsers;

    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthListener;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAuth = FirebaseAuth.getInstance();
        mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

             if(firebaseAuth.getCurrentUser() == null){


                 Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class);
                 loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                 startActivity(loginIntent);

             }

            }
        };

        mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog");
        mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Users");

        mDatabaseUsers.keepSynced(true);

        mDatabase.keepSynced(true);

        mBlogList = (RecyclerView) findViewById(R.id.blog_list);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setReverseLayout(true);
        layoutManager.setStackFromEnd(true);

        mBlogList.setHasFixedSize(true);
        mBlogList.setLayoutManager(new LinearLayoutManager(this));
    }

    @Override
    protected void onStart() {
        super.onStart();

        checkUserExist();

        mAuth.addAuthStateListener(mAuthListener);


        FirebaseRecyclerAdapter<Blog, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
                Blog.class,
                R.layout.blog_row,
                BlogViewHolder.class,
                mDatabase


        ) {
            @Override
            protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) {

                viewHolder.setTitle(model.getTitle());
                viewHolder.setDesc(model.getDesc());
                viewHolder.setImage(getApplicationContext(), model.getImage());

            }
        };

        mBlogList.setAdapter(firebaseRecyclerAdapter);

    }

    private void checkUserExist() {

        final String user_id = mAuth.getCurrentUser().getUid();

        mDatabaseUsers.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if(!dataSnapshot.hasChild(user_id)){

                    Intent setupIntent = new Intent(MainActivity.this, SetupActivity.class);
                    setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(setupIntent);

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    public static class BlogViewHolder extends RecyclerView.ViewHolder{

        View mView;

        public BlogViewHolder(View itemView) {
            super(itemView);

            mView = itemView;
        }

        public void setTitle(String title){

            TextView post_title = (TextView) mView.findViewById(R.id.post_title);
            post_title.setText(title);
        }

        public void setDesc(String desc){

            TextView post_desc = (TextView) mView.findViewById(R.id.post_desc);
            post_desc.setText(desc);

        }

        public void setImage(Context ctx, String image){

            ImageView post_image = (ImageView) mView.findViewById(R.id.post_image);
            Picasso.with(ctx).load(image).into(post_image);
        }

    }


    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if(item.getItemId() == R.id.action_add){

            startActivity(new Intent(MainActivity.this, PostActivity.class));

        }

        if (item.getItemId() == R.id.action_logout){

            logout();

        }

        return super.onOptionsItemSelected(item);
    }

    private void logout() {

        mAuth.signOut();

    }
}
我该怎么办?可以吗

[新编辑]


嗨,谢谢,但没用。Firebase支持现在正在帮助我,我会让你知道在你的应用程序构建中是否有什么东西可以工作。gradle,将此添加到你的依赖项中

compile 'com.google.firebase:firebase-auth:11.0.4'
和java文件

import com.google.firebase.auth.FirebaseAuth;


if (FirebaseAuth.getInstance().getCurrentUser() == null) {
//Go to login 
}
else{
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
 }

在java中,我应该把这段代码放在哪里?在你必须在代码中添加uid的地方添加这段代码……什么都没有,它不起作用……你可能想把
checkUserExist()
放在else块中(并将它从当前所在的
onStart
位置删除)。很可能mAuth.getCurrentUser()是nil,这就是为什么getUid()的原因正在抛出一个错误。您的Firebase可能未正确初始化和/或用户未经身份验证。一些基本的故障排除和代码的逐步执行可能会揭示原因。
import com.google.firebase.auth.FirebaseAuth;


if (FirebaseAuth.getInstance().getCurrentUser() == null) {
//Go to login 
}
else{
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
 }