从firebase检索时出现空指针异常[重复]

Posted

技术标签:

【中文标题】从firebase检索时出现空指针异常[重复]【英文标题】:null pointer exception while retrieving from firebase [duplicate] 【发布时间】:2020-04-30 07:18:14 【问题描述】:

无法从我的数据库中获取数据所有权限都是公开的并且包括依赖项。我正在尝试将数据打印到 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());
                // ...
            
        );

    

【问题讨论】:

【参考方案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。关于我怎么能弄清楚这一点,就是看到你的根下有不止一个孩子。

以上是关于从firebase检索时出现空指针异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从活动调用片段方法时出现空指针异常

从不同的类调用方法时出现空指针异常

尝试使用 pyspark 从 S3 获取数据时出现空指针异常

尝试从 Apache Beam 中的选项获取值时出现空指针异常

尝试从 Kotlin 中的另一个活动访问 EditText 时出现空指针异常

对数据帧火花执行操作时出现空指针异常