Android - 如何使用FirebaseListAdapter按键获取值

时间:2017-04-21 05:47:58

标签: android listview firebase firebase-realtime-database

此代码按键获取值并在listview中设置它们。

    mFirebaseInstance = FirebaseDatabase.getInstance();
    mFirebaseDatabase = mFirebaseInstance.getReference("1234");

    FirebaseListAdapter<String> firebaseListAdapter = new FirebaseListAdapter<String>(
            this,
            String.class,
            android.R.layout.simple_list_item_1,
            mFirebaseDatabase
    ) {
        @Override
        protected void populateView(View v, String model, int position) {

            TextView textView = (TextView) v.findViewById(android.R.id.text1);
            textView.setText(model);


        }
    };

以下是错误消息:

  

com.google.firebase.database.DatabaseException:无法将java.util.HashMap类型的值转换为String .....

My firebase:

3 个答案:

答案 0 :(得分:1)

这是通过键获取值的方法:

namespace App\Http\Controllers

use App\Http\Controllers\admin\AdminController

但是在您的情况下,您得到的错误是因为在child(“ 1234”)中有2个child,并且您试图将它们作为一个String获得,这不是正确的方法,为此,请遵循deepmala的回答。

答案 1 :(得分:0)

不确定如何使用FirebaseListAdapter(也不太确定这是否是您尝试做的事情),但您总是可以使用SingleValueEventListener。

mFirebaseDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        ArrayList<String> strings = new ArrayList<>();
        for (DataSnapshot child : dataSnapshot.getChildren()) {
            String result = snapshot.getValue(String.class);
        }
        textView.setText(result);
        ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.ListView, strings.toArray(new String[list.size()]));
        ((ListView) findViewById(R.id.listview)).setAdapter(adapter);
    }
}

如果您仍然遇到问题,可能是您的数据库结构存在问题,或者您缺少读取权限。

答案 2 :(得分:0)

我说的是这个文件:

      public class Model{
        public String phoneNumber;
        public String timestamp;
    public Model() {
            // Default constructor required for calls to DataSnapshot.getValue(Model.class)
        }
        public Model(String phoneNumber, String timestamp) {
            this.phoneNumber = phoneNumber;
            this.timestamp = timestamp;
            }
    //Getters and setters
        public String getphoneNumber() {
                return phoneNumber;
            }
        public void settimestamp(String timestamp) {
            this.timestamp = timestamp;
        }
        public void setphoneNumber(String phoneNumber) {
            this.phoneNumber = phoneNumber;
        }
      public String gettimestamp() {
            return timestamp;
        }
       @Exclude
        public Map<String, Object> toMap() {
            HashMap<String, Object> result1 = new HashMap<>();
            result1.put("timestamp", timestamp);
            result1.put("phoneNumber", phoneNumber);

            return result1;
        }
}