无法从firebase检索数据到List

时间:2017-11-12 19:06:22

标签: java android firebase firebase-realtime-database

我的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]
}

}

我手机上的东西......

image

1 个答案:

答案 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中的setCoordinaatsetname中的setNamegetname中的getNamegetcoordinaat中的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()