Android Firebase 无法将 java.util.HashMap 类型的值转换为字符串

标签 android firebase firebase-realtime-database

我正在尝试在我的 fragment 上使用使用数组适配器的 ListView ,但是当尝试使用教程进行操作时,每次我打开该特定 fragment 时它都会崩溃。我试图将我的 firebase 上的数据显示到 ListView 中,但每次打开它时它都会崩溃。

这是我的数据库 enter image description here

从图片我的计划是只显示用户的电子邮件和姓名,而不包括类型,但我稍后会这样做。

这是我的代码

public class memberFragment extends Fragment {
private ListView mylistView;
private DatabaseReference mDatabase;
ArrayList<String> myArrayList = new ArrayList<>();
FirebaseDatabase myFirebase;


public memberFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_member2, container, false);
    mDatabase = FirebaseDatabase.getInstance().getReference().child("Accounts").child("Users");
    final ArrayAdapter<String> myArrayAdapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,myArrayList);
     mylistView = (ListView)view.findViewById(R.id.listView);
     mylistView.setAdapter(myArrayAdapter);


    mDatabase.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            String myChildValues = dataSnapshot.getValue(String.class);
            myArrayList.add(myChildValues);
            myArrayAdapter.notifyDataSetChanged();


        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            myArrayAdapter.notifyDataSetChanged();

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    // Inflate the layout for this fragment
    return view;

任何可能导致问题的想法?我试图搜索并发现它与 hashmap 或 map 相关,但我不知道如何将它放在我的数组中?

最佳答案

可以使用模型类来实现此目的,或者您可以使用最简单的方法,使用 String 类。为此,您可以使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("Accounts").child("Users");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String email = ds.child("email").getValue(String.class);
            String name = ds.child("name").getValue(String.class);
            Log.d("TAG", email + " / " + name);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(eventListener);

您的输出将是:

a@b.com / idk
//and so on

关于Android Firebase 无法将 java.util.HashMap 类型的值转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48868743/

相关文章:

java - 我的模型的简单继承问题

java - 在 Android 中接收用户输入然后继续执行的正确方法

angular - Observable .do() 运算符的用例 (rxjs)

java - 如何在 Firebase 中添加图像列表?

javascript - 从 firebase 获取正确路径时出错

android - 如何保证Firebase中的数据安全?

android - 以编程方式将 ID 设置为 View

android - 如何更新 ListView 而不会失去列表项中 EditText 的焦点? (安卓)

firebase - 是否可以在 Unity3D 上集成 Firebase ML-Kit?

firebase - 按文档id查询集合