2017-10-05 19 views
3

我在Firebase上有一個數據庫,並試圖讓android將它打印到ListView中。我可以讓ListView打印一些東西,但它好像是某些ID的值,而不是實際的值。關鍵是能夠建立一個搜索欄,它可以在數據庫中找到任何數據。 我在addValueEventListener中註釋了一些註釋。這段代碼應該可以工作,但是當我使用它時,當我進入「ExistingCustomerActivity」活動時,我的應用程序崩潰而沒有錯誤。 My database structure and the output from the app, with the current code.請注意ListView當前正在打印「買家」下的值。 有沒有人可以幫助解決這個問題?提前致謝。 更新:我可以看到數據在日誌中正確加載,但它仍然顯示我假設的某種ID。當addValueEventListener調用時,Firebase返回錯誤的值

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) { 

       } 
      }); 
     } 
    } 

買家類:

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

有你的火力DB結構內部沒有'PersonNumberTextField' – akhilesh0707

+0

用實際的變量名稱,比如'比爾,Intereresse和你的'公共採購中others'()'構造 – akhilesh0707

+0

的「PersonNumberTextField」是從另一個活動,我將數據插入數據庫。 – Michael

回答

0

你必須做如下圖所示。

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

'買家buyerList = childSnapshot.getValue(Buyers.class);'返回空記錄,因爲在firebase變量和買家變量不同 – akhilesh0707

+0

那麼你必須這樣做。 –

+0

@ akhilesh0707是正確的,它使應用程序崩潰,這可能是因爲它返回null。你有辦法解決這個akhilesh0707? – Michael

2

你需要改變你的Buyers類變量,根據火力DB結構或使用地圖,讓值

嘗試下面的代碼從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) { 

    } 
}); 

變化得到使用地圖值的構造函數從DataSnapshotMap並獲取值並設置到您當地的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

好吧,這段代碼並沒有給出任何錯誤,但是它仍然返回了描述中鏈接中圖片中顯示的值 – Michael

+0

是否改變了您的'Buyers'構造函數? – akhilesh0707

+0

是的,看起來這部分工作也是,但值仍然是那些字符串,我會假設是我想要的ID的 – Michael

相關問題