2017-05-08 3 views
0

Ich habe Probleme, den Status eines boolean aus meiner Firebase-Datenbank in einen Schalter zu lesen, den ich habe.Fehler beim Lesen des Firebase-Schalters, wenn ich Daten aktualisiere

Ich halte eine Null-Zeiger-Ausnahme erhalten, aber der Wert in der Datenbank vorhanden, so nicht sicher, was ich falsch gemacht haben

java.lang.NullPointerException: Versuch android.content.Context android virtuelle Methode‘aufzurufen .view.ViewGroup.getContext()‘auf ein null-Objekt Referenz

Fragment

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.display_match_details_fragment, container, false); 


    //FIREBASE 
    mFirebaseAuth = FirebaseAuth.getInstance(); 
    firebaseUser = mFirebaseAuth.getCurrentUser(); 
    final String uId = firebaseUser.getUid(); 

    mFirebaseDatabase = FirebaseDatabase.getInstance(); 
    usersDatabase = mFirebaseDatabase.getReference().child("users"); 
    groupsDatabase = mFirebaseDatabase.getReference().child("groups"); 

    tvAddedBy = (TextView) view.findViewById(R.id.tvAddedByMatchDisplay); 
    tvMatchTime = (TextView) view.findViewById(R.id.tvMatchTime); 
    tvMatchDay = (TextView) view.findViewById(R.id.tvMatchDay); 
    switchPlaying = (Switch) view.findViewById(R.id.switchPlay); 

    btnConfirmStatus = (Button) view.findViewById(R.id.btnPlayingConfirm); 

    switchPlaying.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean playingExtra) { 
      Snackbar.make(compoundButton, "Playing: " + playingExtra, Snackbar.LENGTH_SHORT) 
        .setAction("ACTION", null).show(); 
     } 
    }); 



    btnConfirmStatus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


     } 
    }); 



    readPlaying(); 


    return view; 
}// end onCreate 


// Read playing times from DB 
private void readPlaying() { 
    usersDatabase.child(firebaseUser.getUid()).child("playingExtra").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if(!dataSnapshot.exists() || dataSnapshot.getValue() == null) { 

       Toast.makeText(getActivity(), "NULL", Toast.LENGTH_SHORT).show(); 

      } 
      else{ 
       Boolean playingExtra = Boolean.valueOf(dataSnapshot.getValue().toString()); 

       switchPlaying.setChecked(playingExtra); 

      } 
     } 

Voll Stack Trace

05-08 15:57:00.461 2392-2601/com..squad E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb8e53e40 
05-08 15:57:01.046 2392-2392/com.ciaranbyrne.squad E/AndroidRuntime: FATAL EXCEPTION: main 

                    java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.view.ViewGroup.getContext()' on a null object reference 
                     at android.support.design.widget.Snackbar.<init>(Snackbar.java:192) 
                     at android.support.design.widget.Snackbar.make(Snackbar.java:224) 
                     at com.ciaranbyrne.squad.DisplayMatchFragment$1.onCheckedChanged(DisplayMatchFragment.java:97) 
                     at android.widget.CompoundButton.setChecked(CompoundButton.java:156) 
                     at android.widget.Switch.setChecked(Switch.java:1070) 
                     at com.ciaranbyrne.squad.DisplayMatchFragment$3.onDataChange(DisplayMatchFragment.java:134) 
                     at com.google.android.gms.internal.zzajp.zza(Unknown Source) 
                     at com.google.android.gms.internal.zzakp.zzcxi(Unknown Source) 
                     at com.google.android.gms.internal.zzaks$1.run(Unknown Source) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:168) 
                     at android.app.ActivityThread.main(ActivityThread.java:5845) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 
05-08 15:57:15.694 2392-2601/com.ciaranbyrne.squad E/OpenGLRenderer: GL error: Out of memory! 
+0

Bitte fügen Sie Ihre Datenbankstruktur hinzu. –

+1

Wenn Sie zuerst eine Frage zu einem Absturz stellen, hilft die vollständige Stapelverfolgung dabei, genau festzustellen, welche Zeile fehlerhaft ist. Zweitens bedeutet die Fehlermeldung, dass Sie an der fehlerhaften Leitung etwas wie " .getContext()" tun, aber die "ViewGroup" ist "null", also bin ich mir nicht sicher, ob Firebase etwas damit zu tun hat . Schließlich ist nur 'dataSnapshot.getValue (Boolean.class);' notwendig, wenn der Wert mit 'reference.setValue () gesetzt wurde;' – Sunshinator

+0

Der Stack-Trace wurde wie vorgeschlagen hinzugefügt, ich habe gerade versucht, boolean playingExtra = dataSnapshot zu verwenden. getValue (Boolean.class); aber kein Glück –

Antwort

0

Try

Snackbar.make(findViewById(android.R.id.content), "Playing: " + String.valueOf(playingExtra), Snackbar.LENGTH_SHORT) 
       .setAction("ACTION", null).show(); 
+0

Nur versucht, kein Glück, leider! –

+0

@ Ciaránimo Eine Bearbeitung gemacht, versuchen Sie es jetzt –

0

Vorausgesetzt Sie haben eine CoordinatorLayout haben zu verwenden, die wie folgt aussieht:

CoordinatorLayout coordinatorLayout = (CoordinatorLayout) view.findViewById(R.id.coordinator_layout); 

als zu verwenden, um die Snackbar Klasse, bitte den folgenden Code verwenden:

Snackbar.make(coordinatorLayout, "Playing: " + playingExtra, Snackbar.LENGTH_LONG) 
    .setAction("ACTION", new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //do what you want 
     } 
    }).show(); 

versuchen auch diese Zeile zu ändern, mit:

dataSnapshot.getValue(Boolean.class); 

Hoffe, es hilft.

0

Ich verstehe nicht, die Details gut genug, um sie zu erklären, aber es scheint Probleme zu sein, mit einem SnackBar in einem Fragment vor der Ansicht Hierarchie Fragmente zu schaffen hat zu der einschließe Aktivität hinzugefügt (related question).

Sie müssen die Verarbeitung in zu einem späteren Zeitpunkt in der Fragment lifecycle durchführen. Verschieben Sie es aus onCreateView() und in onActivityCreated() oder einige Lifecycle-Methode, die später ausgeführt wird, z. B. onStart().

Verwandte Themen