2017-08-09 186 views
-1

我正在做一個博客的應用程序,但是當我運行它,我有崩潰的這段代碼:NullPointerException異常與火力地堡認證

了java.lang.RuntimeException:無法啓動活動ComponentInfo {com.fgvelectro。 f/com.fgvelectro.f.MainActivity}:java.lang.NullPointerException:嘗試調用空對象引用虛擬方法'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()'

我在網上搜索了幾天,沒有成功。我看到其他討論這個問題的線索,但沒有解決。這是我的MainActivity:

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(); 

    } 
} 

我知道這是很難(消磨時間和)來解決這個問題,但如果你能幫助我,謝謝,謝謝,謝謝。

faby


現在我的代碼如下所示:

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); 

       } 
       if (FirebaseAuth.getInstance().getCurrentUser() == null) {Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class); 
        loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        startActivity(loginIntent); 
       } 
       else{ 
        String uid = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
       } 
      } 

我該怎麼辦?可以嗎?

[新編輯]

嗨,謝謝,但沒有任何工作。現在火力支持,幫助我,我會得到你知道,如果事情會工作

+3

的【什麼是一個NullPointerException,如何解決呢?(可能的複製https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do- i-fix-it) –

+1

* mAuth.getCurrentUser()*很可能是零,這就是getUid()拋出錯誤的原因。您的Firebase可能未正確初始化,並且/或者用戶未通過身份驗證。通過代碼進行一些基本的故障排除和步驟可能會揭示原因。 – Jay

回答

2

在你的應用的build.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(); 
} 
+0

我在哪裏可以把這段代碼放在java中? –

+0

添加此代碼,您必須在代碼中添加uid .... –

+0

沒有任何作用,它不起作用.... –