我的autocompletetextview中没有获取数据库名称项。我不确定我的代码有什么问题。
这是我的小型火力库数据库。
[ null, { "Coordinaat" : 75,
"Naam" : "Cream"
}, {
"Coordinaat" : 47885,
"Naam" : "Cacao"
}, {
"Coordinaat" : 48456,
"Naam" : "Cola"
}, {
"Coordinaat" : 25164,
"Naam" : "Yoghurt"
}, {
"Coordinaat" : 54,
"Naam " : "Carrot"
}, {
"Coordinaat" : 57,
"Naam" : "Yum"
} ]
这是我的ProductClass。
public class Product {
public String name;
public int coordinaat;
public Product()
{
}
public Product(String name, int coordinaat)
{
this.name = name;
this.coordinaat = coordinaat;
}
public void setcoordinaat(int coordinaat) {
this.coordinaat = coordinaat;
}
public void setname(String name)
{
this.name = name;
}
public String getname()
{
return name;
}
public int getcoordinaat()
{
return coordinaat;
}
}
这是我的活动代码。
public class tweede extends AppCompatActivity {
private static final String[] producten = new String[] { "Yoghurt",
"Cream", "Cacao", "Cola", "Yummy", "Chocolate" , "Can" , "Cannabis" , "Caramel", "Carrot", "Coconut" };
DatabaseReference databaseProducten;
//ListView lstviewProducten;
List <Product> lstPro = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tweede);
databaseProducten = FirebaseDatabase.getInstance().getReference();
AutocmpleteMeth();
// lstviewProducten = (ListView) findViewById(R.id.listView2);
}
@Override
protected void onStart() {
super.onStart();
databaseProducten.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
lstPro.clear();
for(DataSnapshot productenSnapshot : dataSnapshot.getChildren())
{
Product product = productenSnapshot.getValue(Product.class);
lstPro.add(product);
}
AutocmpleteMeth(); }
@Override public void onCancelled(DatabaseError databaseError) {
}
});
}
public void AutocmpleteMeth()
{
// Hieronder is het code voor Autocomplete [BEGIN]
AutoCompleteTextView ACTV;
ACTV=(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView2);
ArrayAdapter<Product> adapter = new ArrayAdapter<Product>(this, android.R.layout.simple_dropdown_item_1line, lstPro);
ACTV.setAdapter(adapter);
ACTV.setThreshold(1);
//Autocmplete [END]
}
}
我手机上的东西......
答案 0 :(得分:0)
你到达那里,是你记忆中Product
班的地址。您需要知道Firebase实时数据库SDK将使用反射序列化对象实例上的所有可见字段和JavaBean类型的getter方法以发现它们。因此,如果它看到一个字段&#34; name&#34;,它将序列化名为&#34; name&#34;的属性。如果它看到名为&#34; getName&#34;的getter方法,它将序列化一个名为&#34; name&#34;的属性。
代码中的问题是您的getter和setter名称不正确。这是您使用Product
class:
public class Product {
public String name;
public int coordinaat;
public Product() {}
public Product(String name, int coordinaat) {
this.name = name;
this.coordinaat = coordinaat;
}
public void setCoordinaat(int coordinaat) {
this.coordinaat = coordinaat;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public int getCoordinaat(){
return coordinaat;
}
public String toString(){
return name;
}
}
看到我更改了setcoordinaat
中的setCoordinaat
,setname
中的setName
,getname
中的getName
和getcoordinaat
中的getCoordinaat
null
。
假设节点的名称不是records
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
long Coordinaat = ds.child("Coordinaat").getValue(Long.class);
String Naam = ds.child("Naam").getValue(String.class);
Log.d("TAG", Coordinaat + " / " + Naam);
list.add(Coordinaat + " / " + Naam);
}
Log.d("TAG", list);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
rootRef.addListenerForSingleValueEvent(eventListener);
,而是Firebase根的直接子节点,要显示这些值,请使用以下代码:
3212 / Cream
47885 / Cacao
5 / Cola
466468 / Youghurt
输出将是:
malloc()