2017-03-26 2 views
0

Ich hatte einen Code, der Daten von Firebase, die funktionierte, aber funktioniert irgendwie nicht mehr funktioniert. Alles in der ValueEventListener wird übersprungen, wegen eines Fehlers, den es mir gibt: 'Kein solches Instanzfeld:' mDatabase '. Wie kann ich das beheben? Ich habe versucht, Android Studio und mein PC neu zu starten, aber es hält mich diesen Fehler geben ...Firebase 'keine solche Instanz Feld' Fehler

Code:

mDatabase = FirebaseDatabase.getInstance().getReference(); 

ValueEventListener dataListener = new ValueEventListener() { 

    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 

      // Make list for ReisData objects 
      reisDataList = new ArrayList<ReisData>(); 

      // Put objects from database into java object list 
      for (DataSnapshot ds : dataSnapshot.child("allData").getChildren()) { 
       data = ds.getValue(ReisData.class); 
       reisDataList.add(data); 
      } 

    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     // Getting data failed, log a message 
     Log.w("Error:", databaseError.toException()); 
    } 
}; 
mDatabase.addValueEventListener(dataListener); 

EDIT: Ich denke, ich habe das Problem gefunden haben. Unter diesem Code habe ich einen Code hinzugefügt, um den Inhalt von reisDataList anzuzeigen, der die ValueEventListener zu stören scheint. Gibt es eine Möglichkeit, diesen Code ohne Fehler auszuführen?

Added Code:

MyTripsAdapter myTripsAdapter = new MyTripsAdapter(getContext(), reisDataList); 
    ListView listView = (ListView) view.findViewById(R.id.mijnReizenList); 
    listView.setAdapter(myTripsAdapter);*/ 
+0

So Ihr Code kompiliert nicht? – Rahul

+0

Nun, der Code läuft, aber es überspringt den Inhalt des ValueEventListener. – Blank

+0

Tun Sie etwas zur Bestätigung, setzen Sie den Breakpoint im Debug-Modus in onDataChange und ändern Sie Ihre Datenbank direkt von der Firebase-Website. – Rahul

Antwort

0

Dieser Code kann Ihnen helfen, das Problem zu lösen.

public class Map_Activity erweitert AppCompatActivity {

private DatabaseReference databaseRefer; 
private FirebaseDatabase mFirebaseInstance; 
private ArrayList<Location> reisDataList = new ArrayList<>(); 
private MyTripsAdapter myTripsAdapter; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 

    mFirebaseInstance = FirebaseDatabase.getInstance(); //getting instance of FireDatabase 

    //getting db reference from specific node, here you're not refering the node 
    databaseRefer = mFirebaseInstance.getReference("windfirm/future"); 

    ListView listView = (ListView) view.findViewById(R.id.mijnReizenList); 

    databaseRefer.addListenerForSingleValueEvent(new ValueEventListener() { 

     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

     // pendingCount is the count for dataSnapshot children 
     long[] pendingCount = { dataSnapshot.getChildrenCount() }; 

     //parsing all the node list data from dataSnapshot 
     for (DataSnapshot child : dataSnapshot.getChildren()) { 


       String rightLocation = child.child("lat").getValue().toString(); 
       String leftLocation = child.child("lon").getValue().toString(); 
       String city = child.child("city").getValue().toString(); 
       reisDataList.add(new Location(rightLocation, leftLocation, city)); //adding object to arraylist 

      // we loaded a child, check if we're done 
       pendingCount[0] = pendingCount[0] - 1; 
       if (pendingCount[0] == 0) { 
        myTripsAdapter = new MyTripsAdapter(getContext(), reisDataList); 
        listView.setAdapter(myTripsAdapter); 
       }    


      } 


     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 


    } 

}

+0

Ich habe versucht, Ihren Code zu verwenden, aber der Adapter wird nicht in irgendeiner Weise benachrichtigt. Der Adapter wird gesetzt, was zu einer Nullzeiger-Ausnahme führt: Die Daten vom ValueEventListener wurden noch nicht zurückgegeben. Gibt es eine andere Möglichkeit, dem Adapter mitzuteilen, dass er warten soll, bis Daten vom ValueEventListener zurückgegeben werden? – Blank

+0

Bearbeitete den Code, überprüfen Sie es. Hoffe, es funktioniert. –

Verwandte Themen