2017-10-05 1 views
3

J'ai une base de données sur Firebase et essaye d'obtenir Android pour l'imprimer dans un ListView. Je peux obtenir le ListView pour imprimer quelque chose, mais il semble que ce soit l'ID des valeurs, plutôt que les valeurs réelles. Le point est de pouvoir faire une barre de recherche, qui peut trouver des données sur la base de données. J'ai un code commenté dans le addValueEventListener. Ce code devrait fonctionner, mais quand je l'utilise, mon application plante sans erreur quand je vais à l'activité "ExistingCustomerActivity". My database structure and the output from the app, with the current code. Sachez que ListView imprime actuellement les valeurs juste sous "Acheteurs". Y a-t-il quelqu'un qui peut vous aider à résoudre ce problème? Merci d'avance. Mise à jour: Je peux voir les données sont chargées correctement dans le journal, mais il affiche toujours une sorte d'ID que je suppose.Firebase renvoie des valeurs incorrectes lorsque addValueEventListener a appelé

public class ExistingCustomerActivity extends AppCompatActivity { 

     private DatabaseReference mDatabaseReference; 
     private ListView mUserList; 

     private ArrayList<Buyers> mUsernames = new ArrayList<>(); 

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

      mDatabaseReference = FirebaseDatabase.getInstance().getReference("Buyers"); 

      mUserList = (ListView) findViewById(R.id.UserListView); 

      final ArrayAdapter<Buyers> arrayAdapter = new ArrayAdapter<Buyers>(this, android.R.layout.simple_list_item_1, mUsernames); 

      mUserList.setAdapter(arrayAdapter); 

      mDatabaseReference.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        //Buyers buyerList = new Buyers(childSnapshot); 

         for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) { 
         Map<String, String> map = (Map<String, String>) childSnapshot.getValue(); 
         Log.v("YourValue,","Map value is:" +map.toString()); 
         Buyers buyerList = new Buyers(map); 
         mUsernames.add(buyerList); 

        } 
        arrayAdapter.notifyDataSetChanged(); 

       } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
     } 
    } 

classe acheteurs:

public class Buyers { 
    private String car_Value; 
    private String interest; 
    private String driverLicenseNr; 
    private String name; 
    private String personNr; 
    private String phone_Number; 

public Buyers(Map<String,String> map){ 
    car_Value = map.get("Bil"); 
    interest = map.get("Interresse"); 
    driverLicenseNr = map.get("Kørekortnr"); 
    name = map.get("Navn"); 
    personNr = map.get("Personnr"); 
    phone_Number = map.get("Telefonnr"); 
} 
+0

il n'y a pas 'PersonNumberTextField' l'intérieur de votre structure firebase DB – akhilesh0707

+0

utilisent nom de la variable réelle comme' Bill, Intereresse et others' dans votre 'Les acheteurs publics()' constructeur – akhilesh0707

+0

Le "PersonNumberTextField" est d'une autre activité où je insérer des données dans la base de données. – Michael

Répondre

0

vous devez faire comme ci-dessous.

mDatabaseReference.addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         //Buyers buyerList = new Buyers(childSnapshot); 

         for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) 
         { 
          Buyers buyerList = childSnapshot.getValue(Buyers.class); 
          //buyerList = childSnapshot.child("PersonNumberTextField").getValue(Buyers.class); 
          //Buyers buyerList = childSnapshot.child("PersonNumberTextField").getValue(Buyers.class); 
          //Buyers buyerList = childSnapshot.getValue(Buyers.class); 
          mUsernames.add(buyerList); 
         } 
         arrayAdapter.notifyDataSetChanged(); 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 
+0

'Buyers buyerList = childSnapshot.getValue (Buyers.class);' renvoie un enregistrement null car dans la variable firebase et la variable Buyers sont différents – akhilesh0707

+0

alors vous devez le faire pareil. –

+0

@ akhilesh0707 a raison, l'application plante, probablement parce qu'elle renvoie null. Avez-vous un moyen de résoudre ce akhilesh0707? – Michael

2

Vous devez changer votre variable de classe Buyers selon la structure firebase DB ou utiliser la carte pour obtenir les valeurs

Essayez ci-dessous le code pour obtenir des valeurs en utilisant la carte de Buyers

mDatabaseReference.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     //Buyers buyerList = new Buyers(childSnapshot); 
     for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) { 
      Map<String,String> map=(Map<String, String>) childSnapshot.getValue(); 
      Buyers buyerList = new Buyers(map); 
      mUsernames.add(buyerList); 
     } 
     arrayAdapter.notifyDataSetChanged(); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

Modifier votre Constructeur de DataSnapshot à Map et obtenir les valeurs et définir dans votre variable locale Buyers.

public class Buyers { 
    private String car_Value; 
    private String interest; 
    private String driverLicenseNr; 
    private String name; 
    private String personNr; 
    private String phone_Number; 


    public Buyers(Map<String,String map){ 
     car_Value = map.get("Bil"); 
     interest = map.get("Interresse") 
     driverLicenseNr = map.get("Korekortnr") 
     name = map.get("Navn") 
     personNr = map.get("Personnr")  
     phone_Number =map.get("Telefonnr") 
    } 
} 
+0

Eh bien, ce code ne donne pas d'erreurs, mais il renvoie encore les valeurs indiquées dans l'image dans le lien dans la description – Michael

+0

avez-vous changé votre constructeur 'Buyers'? – akhilesh0707

+0

Oui, et il semble que cette partie fonctionne aussi, mais les valeurs sont toujours les chaînes que je suppose sont des ID pour ce que je veux – Michael