【问题标题】:How to display records from a Firebase database using HashMap<String, String>?如何使用 HashMap<String, String> 显示 Firebase 数据库中的记录?
【发布时间】:2017-03-16 00:58:20
【问题描述】:

我正在开发一个用户可以拥有多个列表的应用。我的 Firebase 数据库如下所示:

我使用的模型是这样的:

public class UserModel {
    private String userId;
    private String userName;
    private String userEmail;
    private HashMap<String, String> lists;

    public UserModel() {}

    public void setUserId(String userId) {this.userId = userId;}
    public String getUserId() {return userId;}

    public void setUserName(String userName) {this.userName = userName;}
    public String getUserName() {return userName;}

    public void setUserEmail(String userEmail) {this.userEmail = userEmail;}
    public String getUserEmail() {return userEmail;}

    public void setLists(HashMap<String, String> lists) {this.lists = lists;}
    public HashMap<String, String> getLists() {return lists;}
}

为了显示列表,我使用FirebaseListAdapterListView。如果我使用这样的代码:

DatabaseReference listsRef = usersRef.child(userId).child("lists");
adapter = new FirebaseListAdapter<Map<String, String>>(MainActivity.this, Map.class, android.R.layout.simple_list_item_1, listsRef) {
    @Override
    protected void populateView(View v, Map<String, String> map, int position) {
        for (Map.Entry<String, String> entry : map.entrySet()) {
            Log.d(TAG, entry.getKey() + "/" + entry.getValue());
        }
    }                
    ListView listView = (ListView) findViewById(R.id.list_view);
    listView.setAdapter(adapter);
}    

我收到此错误:

Error:(221, 31) error: no suitable constructor found for FirebaseListAdapter

我要做的就是使用HashMap 显示the keythe value。我哪里错了?提前致谢!

【问题讨论】:

    标签: android firebase hashmap firebase-realtime-database listadapter


    【解决方案1】:

    populateView的第二个参数已经是列表每个索引的值了。所以你只需要将Map 更改为String

    adapter = new FirebaseListAdapter<String>(MainActivity.this, String.class, android.R.layout.simple_list_item_1, listsRef) {
        @Override
        protected void populateView(View v, String listName, int position) {
            String listKey = this.getRef(position).getKey();
            String listValue = listName;
        }
    }    
    

    希望这会有所帮助:)

    【讨论】:

    • 其实你帮了我很多。它正在工作。如果我使用setOnItemClickListener 并且我使用adapterView.getItemAtPosition(position); 我得到listName。你知道我怎么能从adapterlistKey得到吗?非常感谢!
    • 您可以将listKey 保存在另一个列表变量的某个位置,然后您可以根据位置在任何地方检索该值。 :) @AlexM。
    • “在另一个列表变量上”,是什么意思?如何根据位置检索该值?再次感谢您的回答!
    • @AlexM.,创建一个Map全局变量,然后根据位置放入listKey值。 listKeys.put(position, listKey);,拨打listKeys.get(position)获取密钥。
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    相关资源
    最近更新 更多