Meine App stürzt ab, weil die Nullzeigerausnahme getUid() ist.getUid() gibt null Zeigerausnahme
Dies ist MainActivity.Falls sich kein Benutzer in der Datenbank befindet, wird der Benutzer zur Anmeldeseite geleitet. Wenn der Benutzer versucht, sich anzumelden und er/sie noch nicht angemeldet hat (existiert nicht), dann er/sie ist auf die Setup-Absicht verwiesen.Wie ich weiß, der Benutzer einmal eingeloggt bleibt nicht für immer eingeloggt.Ist es der Grund dafür, dass getUid null zurückgibt? Wie man es löst? folgenden ist der Code:
package com.awani.pocketblog;
import android.app.Activity;
import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
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.Query;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;
import org.w3c.dom.Text;
import java.util.Set;
import static android.app.PendingIntent.getActivity;
public class MainActivity extends AppCompatActivity {
private RecyclerView mBlogList;
private DatabaseReference mDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference mDatabaseUsers;
private DatabaseReference mDatabaseLike;
private boolean mProcessLike = false;
private DatabaseReference mDatabaseCurrentUser;//to retrieve data from the current user.
private Query mQueryCurrentUser;
@Override
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 there is no user signed in,go to loginIntent if(FirebaseAuth.getInstance().getCurrentUser()==null)
{
Intent loginIntent = new Intent(MainActivity.this,LoginActivity.class);
loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(loginIntent);
}
}
};
mBlogList = (RecyclerView) findViewById(R.id.blog_list);
mBlogList.setHasFixedSize(true);
mBlogList.setLayoutManager(new LinearLayoutManager(this));
mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog");
mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Users");
mDatabaseLike = FirebaseDatabase.getInstance().getReference().child("Likes");
//problem is with the following statement:
String currentUserID = mAuth.getCurrentUser().getUid();
mDatabaseCurrentUser = FirebaseDatabase.getInstance().getReference().child("Blog");
mQueryCurrentUser = mDatabaseCurrentUser.orderByChild("uid").equalTo(currentUserID);
mDatabaseUsers.keepSynced(true);
mDatabase.keepSynced(true);
mDatabaseLike.keepSynced(true);
//check if the user trying to login exists or not
checkUserExist();
}
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
//set adpter for recyclerview
FirebaseRecyclerAdapter<Blog,BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
Blog.class,
R.layout.blog_row,
BlogViewHolder.class,
mQueryCurrentUser
) {
@Override
protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) {
final String post_key = getRef(position).getKey();
viewHolder.setTitle(model.getTitle());//model means Blog class over here
viewHolder.setDesc(model.getDesc());
viewHolder.setUsername(model.getUsername());
viewHolder.setLikeButton(post_key);
viewHolder.setImage(getApplicationContext(),model.getImage());
//mView is reference for the whole view
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent singleBlogIntent =new Intent(MainActivity.this,BlogSingleActivity.class);
singleBlogIntent.putExtra("blog_id",post_key);
// singleBlogIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(singleBlogIntent);
}
});
viewHolder.mLikeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProcessLike = true;
mDatabaseLike.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (mProcessLike) {
if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) {
mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();
mProcessLike = false;
} else {
mDatabaseLike.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue("Random value");
mProcessLike = false;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
}
};
mBlogList.setAdapter(firebaseRecyclerAdapter);
}
private void checkUserExist() {
//retrieving UID
if(mAuth.getCurrentUser()!=null) {
final String user_id = mAuth.getCurrentUser().getUid();
//check if the user with this UID already exists
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) {
}
});
}
}
//holder for the recyclerView
public static class BlogViewHolder extends RecyclerView.ViewHolder{
View mView;
ImageButton mLikeButton;
DatabaseReference mDatabaseLike;
FirebaseAuth mAuth;
public BlogViewHolder(View itemView) {
super(itemView);
mView = itemView;
mLikeButton = (ImageButton)mView.findViewById(R.id.like_button);
mDatabaseLike = FirebaseDatabase.getInstance().getReference().child("Likes");
mAuth = FirebaseAuth.getInstance();
mDatabaseLike.keepSynced(true);
}
public void setLikeButton(final String post_key){
mDatabaseLike.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())){
mLikeButton.setImageResource(R.drawable.ic_thumb_up_red_400_24dp);
}else{
mLikeButton.setImageResource(R.mipmap.ic_thumb_up_black_24dp);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
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_description = (TextView) mView.findViewById(R.id.post_description);
post_description.setText(desc);
}
public void setUsername(String username){
TextView post_username = (TextView)mView.findViewById(R.id.post_username);
post_username.setText(username);
}
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);
}
}
@Override
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();
}
}