/ / App stürzt mit java.lang.NullPointerException ab - Android, Firebase, Firebase-Authentifizierung

App stürzt mit java.lang.NullPointerException ab - Android, Firebase, Firebase-Authentifizierung

Ich wollte alle Beiträge mit orderbychild filtern. Aber die App stürzt ab. Nach dem Debuggen zeigt es einen Fehler an:

final String currentUserId=mAuth.getCurrentUser().getUid();  this line of code.

// Ich habe es auf einem Gerät getestet, aber es funktioniert einwandfrei, aber in zwei anderen Geräten stürzt die App ab

// Hier ist mein Fehlerbericht

java.lang.NullPointerException
at com.soumya.uglypeople.MyPosts.onCreateView(MyPosts.java:80)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1643)
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1272)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1120)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1646)
at android.view.View.measure(View.java:15518)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:700)
at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:90)
at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1364)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:765)
at android.view.View.measure(View.java:15518)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:15518)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:15518)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:15518)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:15518)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176)
at android.view.View.measure(View.java:15518)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
at android.view.Choreographer.doCallbacks(Choreographer.java:562)
at android.view.Choreographer.doFrame(Choreographer.java:532)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

// Und hier ist mein Aktivitätscode:

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.facebook.CallbackManager;
import com.facebook.FacebookSdk;
import com.facebook.share.model.ShareLinkContent;
import com.facebook.share.widget.ShareDialog;
import com.firebase.client.Firebase;
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.Query;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Callback;
import com.squareup.picasso.NetworkPolicy;
import com.squareup.picasso.Picasso;


import static android.R.id.list;
import static com.facebook.FacebookSdk.getApplicationContext;
import static com.squareup.picasso.Picasso.with;


public class MyPosts extends Fragment{


private RecyclerView postList;
private DatabaseReference mDatabase;
private DatabaseReference mDatabaseAppriciate;
private DatabaseReference mDatabaseDisgrace;
private LinearLayoutManager layoutManager;
private FirebaseAuth mAuth;
private DatabaseReference mDatabaseCurrentUser;
private Query mQueryCurrentUser;


//private static final String TAG = "MyActivity";

private boolean mProcessAppriciate=false;
private boolean mProcessDisgrace=false;



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {


super.onSaveInstanceState(savedInstanceState);
View rootView = inflater.inflate(R.layout.allposts, container, false);

mAuth= FirebaseAuth.getInstance();

mDatabase= FirebaseDatabase.getInstance().getReference().child("Posts");
mDatabaseAppriciate=FirebaseDatabase.getInstance().getReference().child("Appriciate");
mDatabaseDisgrace=FirebaseDatabase.getInstance().getReference().child("Disgrace");

//Below line shows error
final String currentUserId=mAuth.getCurrentUser().getUid();
mDatabaseCurrentUser=FirebaseDatabase.getInstance().getReference().child("Posts");
mQueryCurrentUser=mDatabaseCurrentUser.orderByChild("uid").equalTo(currentUserId);

mDatabase.keepSynced(true);
mDatabaseAppriciate.keepSynced(true);
mDatabaseDisgrace.keepSynced(true);


postList=(RecyclerView) rootView.findViewById(R.id.postList);
postList.setHasFixedSize(true);
layoutManager=new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
postList.setHasFixedSize(true);
postList.setLayoutManager(layoutManager);


postList.getRecycledViewPool().clear();


return rootView;
}

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


FirebaseRecyclerAdapter<Posts,PostViewHolder> firebaseRecyclerAdapter= new FirebaseRecyclerAdapter<Posts,PostViewHolder>(

Posts.class,
R.layout.single_post,
PostViewHolder.class,
mQueryCurrentUser

) {

@Override
protected void populateViewHolder(final PostViewHolder viewHolder, final Posts model, final int position) {

final String post_key=getRef(position).getKey();

viewHolder.setTitle(model.getTitle());
viewHolder.setDescription(model.getDescription());
viewHolder.setProfileName(model.getProfilename());
viewHolder.setImage(getContext(),model.getImage());
viewHolder.getLayoutPosition();
viewHolder.setAppriciateButton(post_key);
viewHolder.setDisgraceButton(post_key);



//Share click code below
viewHolder.Share.setOnClickListener(new View.OnClickListener() {

CallbackManager callbackManager;
ShareDialog shareDialog;
@Override
public void onClick(View v) {

FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
shareDialog = new ShareDialog(MyPosts.this);
if (ShareDialog.canShow(ShareLinkContent.class)) {

ShareLinkContent content = new ShareLinkContent.Builder()
.setContentTitle(model.getTitle())
.setContentDescription(model.getDescription())
.setImageUrl(Uri.parse(model.getImage()))
.setContentUrl(Uri.parse("https://developers.facebook.com"))
.build();
shareDialog.show(content);

}

}

});

viewHolder.Appriciate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProcessAppriciate=true;



mDatabaseAppriciate.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (mProcessAppriciate) {

if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) {
mDatabaseAppriciate.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();

mProcessAppriciate = false;

}else {
mDatabaseAppriciate.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue(mAuth.getCurrentUser().getDisplayName());
viewHolder.Appriciate.setText("APPRICIATED");

mProcessAppriciate = false;


}

}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

}



});




viewHolder.Disgrace.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProcessDisgrace=true;



mDatabaseDisgrace.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (mProcessDisgrace) {

if (dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) {
mDatabaseDisgrace.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue();
//
mProcessDisgrace = false;

} else {
mDatabaseDisgrace.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue(mAuth.getCurrentUser().getDisplayName());
//
mProcessDisgrace = false;


}

}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

}



});


//Disgrace Button Click code Ends

}

};

postList.setAdapter(firebaseRecyclerAdapter);


//test code
firebaseRecyclerAdapter.notifyDataSetChanged();

}


public static class PostViewHolder extends RecyclerView.ViewHolder{

View mView;
Button Appriciate;
Button Disgrace;
Button Share;
DatabaseReference mDatabaseAppriciate;
DatabaseReference mDatabaseDisgrace;
FirebaseAuth mAuth;




public PostViewHolder(View itemView) {
super(itemView);
mView=itemView;
Appriciate=(Button) mView.findViewById(R.id.appriciate);
Disgrace=(Button) mView.findViewById(R.id.disgraceful);
Share=(Button) mView.findViewById(R.id.share);


mDatabaseAppriciate=FirebaseDatabase.getInstance().getReference().child("Appriciate");
mDatabaseDisgrace=FirebaseDatabase.getInstance().getReference().child("Disgrace");
mAuth=FirebaseAuth.getInstance();
mDatabaseAppriciate.keepSynced(true);
mDatabaseDisgrace.keepSynced(true);


}

public void setAppriciateButton(final String post_key){

mDatabaseAppriciate.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())){
Appriciate.setBackgroundColor(Color.GRAY);
Appriciate.setText("Appriciated");

}else{
Appriciate.setBackgroundColor(Color.GREEN);
Appriciate.setText("APPRICIATE");
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

}


public void setDisgraceButton(final String post_key){

mDatabaseDisgrace.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())){
Disgrace.setBackgroundColor(Color.GRAY);
Disgrace.setText("Disgraced");

}else{
Disgrace.setBackgroundColor(Color.RED);

Disgrace.setText("DISGRACE");
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

}

public void setTitle(String title){
TextView postTitle=(TextView) mView.findViewById(R.id.allPostTitle);
postTitle.setText(title);

}

public void setDescription(String description){
TextView postDescription=(TextView) mView.findViewById(R.id.allPostDescription);
postDescription.setText(description);
}

public void setProfileName(String profilename){
TextView postName=(TextView) mView.findViewById(R.id.profileName);
postName.setText(profilename);
}




public void setImage(final Context context, final String image) {
final ImageView postImage=(ImageView) mView.findViewById(R.id.allPostImage);
with(context).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(postImage, new Callback() {
@Override
public void onSuccess() {

}

@Override
public void onError() {



Picasso.with(context).load(image).resize(500,700).into(postImage);

}
});

}




}
}

// Hier "s build gradle" (Module.app)

    apply plugin: "com.android.application"

android {
compileSdkVersion 24
buildToolsVersion "24.0.3"

packagingOptions {
exclude "META-INF/LICENSE"
exclude "META-INF/LICENSE-FIREBASE.txt"
exclude "META-INF/NOTICE"

}


defaultConfig {


minSdkVersion 17
targetSdkVersion 24
multiDexEnabled true
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"

}
}
}

dependencies {
compile fileTree(include: ["*.jar"], dir: "libs")
androidTestCompile("com.android.support.test.espresso:espresso-core:2.2.2", {
exclude group: "com.android.support", module: "support-annotations"
})
compile "com.android.support:appcompat-v7:24.2.1"
compile "com.android.support:design:24.2.1"
compile "com.android.support:recyclerview-v7:24.2.1"
compile "com.android.support:cardview-v7:24.2.1"
compile "com.google.firebase:firebase-core:10.0.1"
compile "com.google.firebase:firebase-database:10.0.1"
compile "com.google.firebase:firebase-storage:10.0.1"
compile "com.google.firebase:firebase-auth:10.0.1"
compile "com.firebase:firebase-client-android:2.5.2"
compile "com.firebaseui:firebase-ui-database:1.0.1"
compile "com.squareup.picasso:picasso:2.5.2"
testCompile "junit:junit:4.12"
compile "com.google.android.gms:play-services:10.0.1"
compile "com.android.support:multidex:1.0.1"
compile "com.squareup.okhttp3:okhttp:3.5.0"
compile "com.facebook.android:facebook-android-sdk:[4,5)"
}
apply plugin: "com.google.gms.google-services"

Antworten:

1 für die Antwort № 1

Das Problem besteht darin, dass in Firebase beim Erstellen eines Benutzers der Benutzer nicht angemeldet wird.

Erste Überprüfung mAuth ist null oder nicht, dann getUid wenn nicht null.

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// User is signed in
// Get User details

} else {
// No user is signed in
// create new signin
}

1 für die Antwort № 2

Das Problem besteht darin, dass Sie synchron den aktuellen Benutzer lesen, der möglicherweise null zurückgibt:

final String currentUserId=mAuth.getCurrentUser().getUid()

Wenn die App gestartet wird, ist der Anmeldestatus des Benutzers möglicherweise noch nicht bekannt. In diesem Fall getCurrentUser() gibt null zurück, wodurch der Code abstürzt.

Um dies zu verhindern, sollten Sie Hör mal zu dass der Authentifizierungsstatus bestätigt / geändert wird:

FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
}
}
});

Verwandte Fragen


Kommentare (0)

Einen Kommentar hinzufügen