【问题标题】:while retriving data from firebase, getters are returned null从 firebase 检索数据时,getter 返回 null
【发布时间】:2018-07-27 08:18:59
【问题描述】:

我正在尝试从 firebase 检索数据。我已成功建立 Firebase 数据库,但在检索操作期间,getter 方法返回 null 值,如何检索该信息?对象不为 null,但 getter 返回 null。

public class ViewDatabase extends AppCompatActivity {

    public FirebaseDatabase firebaseDatabase;
    public DatabaseReference databaseReference;
    public ListView listView;
    public static final String TAG="ViewDatabase";
    //Oncreate
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_database);
        listView=findViewById(R.id.list);
        firebaseDatabase =FirebaseDatabase.getInstance();
        databaseReference=firebaseDatabase.getReference();
        databaseReference.addValueEventListener(new ValueEventListener()
        {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot)
            {
                showData(dataSnapshot);
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) { }
        });
    }
    //Retriving data
    private void showData(DataSnapshot dataSnapshot) {
        ArrayList<String> array = new ArrayList<String>();
        for (DataSnapshot ds : dataSnapshot.getChildren()) {
            User user = ds.getValue(User.class);

            if (user != null) {
                Log.i(TAG, "user is not null" );

            } else {
                Log.i(TAG, "user is  null" );

            }
            if(user.getAddress()!=null){
              Log.i(TAG, "address is not null" );
            }
            else{
           Log.i(TAG, "address is  null" );

             }
            array = new ArrayList<String>();
            array.add(user.getAddress());
            array.add(user.getDate());
            array.add(user.getEmail());
            array.add(user.getFname());
            array.add(user.getGender());
            array.add(user.getZone());
            array.add(user.getLname());
            array.add(user.getPhone());


        }
        ArrayAdapter adapter = new ArrayAdapter(this, layout.simple_list_item_1, array);
        listView.setAdapter(adapter);

    }

}

我做错了什么?

//JSON EXPORT
{"User" : {
"-LIN7aCLwUo7fdjSm5ij" : {
  "address" : "jagraon",
  "date" : "2018/7/27",
  "email" : "gurjaps00@gmail.com",
  "fname" : "Gurjap",
  "id" : "-LIN7aCLwUo7fdjSm5ij",
  "lname" : "Singh",
  "phone" : "8727050501",
  "zone" : "CARDIO ZONE"
},
"-LIN7iFVzA8eVShCSmwu" : {
  "address" : "jagraon",
  "date" : "2018/7/25",
  "email" : "livtaran@gmail.com",
  "fname" : "Gurlivtaran",
  "id" : "-LIN7iFVzA8eVShCSmwu",
  "lname" : "Singh",
  "phone" : "8725000740",
  "zone" : "STRENTH ZONE"
},
"-LIjA7Kox5dtN8jg9ywY" : {
  "address" : "chuuu",
  "date" : "Select Expiry Date",
  "email" : "cbjj@tuj.dhhu",
  "fname" : "dhhxc",
  "lname" : "cvhh",
  "phone" : "9856533565",
  "zone" : "CARDIO ZONE"}

} }

这是从 firebase 导出的 JSON。

【问题讨论】:

  • 你能发布你的数据库结构吗?我认为您的数据库参考应该是databaseReference=firebaseDatabase.getReference().child("User");
  • 请编辑您的问题以包含您的 JSON 数据(作为文本,请不要截图)。您可以通过单击Firebase Database console 中的“导出 JSON”链接来获取此信息。
  • 完成,先生,请再次检查我的代码
  • @RohitMaurya 这里是 JSON 文件的结构
  • @FrankvanPuffelen JSON 已导出

标签: android firebase firebase-realtime-database nullpointerexception


【解决方案1】:

您正在从数据库中的错误级别读取数据。

您正在从根目录读取,然后直接在其下遍历子代。这意味着您获得了/User 的快照,并且您正试图从中读取User.class。这是行不通的,因为/User 下没有属性addressname直接。这些属性在 JSON 中的位置低一级,因此您的代码也需要遍历各个用户。

一个简单的修复:

private void showData(DataSnapshot dataSnapshot) {
    ArrayList<String> array = new ArrayList<String>();
    for (DataSnapshot ds : dataSnapshot.getChildren()) {
        System.out.println(ds.getKey());
        for (DataSnapshot userSnapshot : ds.getChildren()) {
            System.out.println(userSnapshot.getKey());
            User user = userSnapshot.getValue(User.class);
            ...

另一种选择(可能是更好的解决方案)可能是只读取 /User 节点:

firebaseDatabase =FirebaseDatabase.getInstance();
databaseReference=firebaseDatabase.getReference();
databaseReference.child("User").addValueEventListener(new ValueEventListener() {
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2017-04-03
    相关资源
    最近更新 更多