【问题标题】:null pointer exception while retrieving from firebase [duplicate]从firebase检索时出现空指针异常[重复]
【发布时间】:2023-03-07 22:52:01
【问题描述】:

无法从我的数据库中获取数据所有权限都是公开的并且包括依赖项。我正在尝试将数据打印到 logcat,收到 NullPointerException

MainActivity.java


import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference();
        myRef.addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String co2=dataSnapshot.child("co2").getValue().toString();
                String humi=dataSnapshot.child("humi").getValue().toString();
                String temp=dataSnapshot.child("temp").getValue().toString();
                Log.i("kkk","hhh"+ co2 +" "+humi +" "+temp);
                // ...
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                // Getting Post failed, log a message
                Log.w("p", "loadPost:onCancelled", databaseError.toException());
                // ...
            }
        });

    }
}

【问题讨论】:

    标签: android firebase-realtime-database nullpointerexception


    【解决方案1】:

    在您的根引用下,有多个对象。为了获取这些对象,您需要使用 getChildren() 方法迭代 DataSnapshot 对象,如下面的代码行所示:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                double co2 = ds.child("co2").getValue(Double.class);
                long humi = ds.child("humi").getValue(String.class);
                long temp = ds.child("temp").getValue(String.class);
                Log.d(TAG, co2 + " / " + humi + " / " + temp);
            }
        }
    
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
        }
    };
    rootRef.addListenerForSingleValueEvent(valueEventListener);
    

    您的 logcat 中的结果将是:

    1007.87401... / 70 / 24
    1259.84251... / 63 / 26
    1511.81102... / 63 / 26
    //The other records
    

    【讨论】:

    • Alex Mamo 你是怎么想出来的任何文档请分享。我无法在文档中找到这个
    • 这里是docs。关于我怎么能弄清楚这一点,就是看到你的根下有不止一个孩子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    相关资源
    最近更新 更多