2017-03-16 106 views
0

我正在开发一个应用程序,其中的用户可以有多个列表。我的火力地堡数据库看起来是这样的:如何使用HashMap <String,String>显示来自Firebase数据库的记录?

enter image description here

,我使用的模型是这样的:

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。我错在哪里?提前致谢!

回答

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; 
    } 
}  

希望这有助于:)

+0

其实,你帮了我很多。它正在工作。如果我使用'setOnItemClickListener'并使用'adapterView.getItemAtPosition(position);'我得到'listName'。你有什么想法我怎么能从'adapter'获得'listKey'?非常感谢! –

+0

您可以将'listKey'保存在另一个列表变量的某个位置,然后您可以根据位置检索任何值。 :) @AlexM。 – Wilik

+0

“另一个列表变量”,这是什么意思?我如何根据职位获取价值?再次感谢您的回答! –

相关问题