2017-07-14 2 views
0

App ruft keine Daten aus der Firebase-Datenbank ab. App läuft gut, zeigt aber nichts in der App, zeigt nur leer. Hier ist mein CodeDaten werden nicht angezeigt, wenn sie aus der Firebase-Datenbank abgerufen werden

public class profilemain extends AppCompatActivity { 

    private FirebaseAuth mAuth; 
    private FirebaseAuth.AuthStateListener mAuthListener; 

    private Firebase url; 

    private ListView listview; 
    ArrayList<String> arrayList=new ArrayList<>(); 
    ArrayAdapter<String> arrayAdapter; 

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

     listview=(ListView) findViewById(R.id.listview); 

     Firebase.setAndroidContext(this); 
     url=new Firebase("https://-------.firebaseio.com/users"); 
     arrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayList); 
     listview.setAdapter(arrayAdapter); 
     url.addChildEventListener(new com.firebase.client.ChildEventListener() { 
      @Override 
      public void onChildAdded(com.firebase.client.DataSnapshot dataSnapshot, String s) { 
       String value=dataSnapshot.getValue(String.class); 
       arrayList.add(value); 
       arrayAdapter.notifyDataSetChanged(); 
      } 

      // .. Other Overriden functions 
     }); 

     mAuth=FirebaseAuth.getInstance(); 
     mAuthListener =new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       if (firebaseAuth.getCurrentUser()==null){ 
        startActivity(new Intent(profilemain.this,MainActivity.class)); 

       } 
      } 
     }; 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     mAuth.addAuthStateListener(mAuthListener); 
    } 
} 

Und hier ist meine XML-Datei unten. Die App läuft gut, zeigt aber nicht die Daten an.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.food.sheenishere.stark.profilemain"> 

    <FrameLayout 
     android:id="@+id/content" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

     <ListView 
      android:id="@+id/listview" 
      style="@style/Widget.AppCompat.ListView" 
      android:layout_width="wrap_content" 
      android:layout_height="337dp" /> 
    </FrameLayout> 

    <android.support.design.widget.BottomNavigationView 
     android:id="@+id/navigation" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:background="?android:attr/windowBackground" 
     app:menu="@menu/navigation" /> 

</LinearLayout> 

Hier ist das Schema meiner Firebase-Datenbank.

enter image description here

+0

Bitte seien Sie sehr spezifisch mit Ihrem Problem. Diese Frage sucht Hilfe zum Debuggen. –

+0

Ich bin spezifisch, dass Daten nicht abgerufen werden –

+0

Bitte fügen Sie einen Dummy-Snapshot Ihrer Daten in Firebase. Wir müssen die Struktur Ihrer Daten in Firebase sehen. –

Antwort

0

Sie benötigen eine Klasse wie diese die Benutzer

public class Users { 
    List<String> users; 
} 

Jetzt aus Ihrer Datenbank Firebase wie diese erhalten haben.

url.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     Users userList = dataSnapshot.getValue(Users.class); 

     // Add all the users fetch in the ArrayList. 
     for (String user : userList.users) 
      arrayList.add(user); 

     arrayAdapter.notifyDataSetChanged(); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {   
    } 
}); 
+0

Während die Verwendung einer benutzerdefinierten Java-Klasse hilfreich ist, ist sie nicht erforderlich. –

+0

immer noch nicht funktioniert ... –

0

wahrscheinlich Sie sind nicht signiert, während die Standard-Sicherheitsregeln verlangen, dass Sie authentifiziert sind, wenn Sie den Hörer befestigen. Eine schnelle Lösung:

mAuth=FirebaseAuth.getInstance(); 
    mAuthListener =new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      if (firebaseAuth.getCurrentUser()==null){ 

       startActivity(new Intent(profilemain.this,MainActivity.class)); 

       arrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arrayList); 
       listview.setAdapter(arrayAdapter); 
       url.addChildEventListener(new com.firebase.client.ChildEventListener() { 
        @Override 
        public void onChildAdded(com.firebase.client.DataSnapshot dataSnapshot, String s) { 
         String value=dataSnapshot.getValue(String.class); 
         arrayList.add(value); 
         arrayAdapter.notifyDataSetChanged(); 
        } 

        // .. Other Overriden functions 
       }); 
      } 
     } 
    }; 

Aber es gibt zu viele andere Dinge, die hier schief gehen könnten. Zum einen: Sie sind auf einer sehr alten Firebase-Version. Ich empfehle, mit the latest documentation und diesem codelab frisch anzufangen.

+0

Ich bin bereits in Sir signiert –

+0

Ich bin angemeldet dann nur ich möchte Daten abrufen, aber App läuft, aber keine Daten abrufen zeigt leer –

Verwandte Themen