Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase-(具有多个子节点的DataSnapshot)-NullPointerException_Java_Android_Firebase Realtime Database_Nullpointerexception_Nested - Fatal编程技术网

Java Firebase-(具有多个子节点的DataSnapshot)-NullPointerException

Java Firebase-(具有多个子节点的DataSnapshot)-NullPointerException,java,android,firebase-realtime-database,nullpointerexception,nested,Java,Android,Firebase Realtime Database,Nullpointerexception,Nested,目标:我正在尝试从Firebase中提取数据,并将值插入嵌套节点(在Android中)的字符串中。 注意:对于第一个变量/键值对(mNum)来说可以,但是对于其他变量/键值对则可以获取null指针 研究:Firebase docs、Youtube、Stackoverflow关于这个具体问题,包括: 这一点如何适用于其他数据库:当数据库有多个嵌套时,很难找到有关获取Firebase数据库信息的信息 错误: java.lang.NullPointerException: println need

目标:我正在尝试从Firebase中提取数据,并将值插入嵌套节点(在Android中)的字符串中。

注意:对于第一个变量/键值对(mNum)来说可以,但是对于其他变量/键值对则可以获取null指针


研究:Firebase docs、Youtube、Stackoverflow关于这个具体问题,包括:

这一点如何适用于其他数据库:当数据库有多个嵌套时,很难找到有关获取Firebase数据库信息的信息


错误

java.lang.NullPointerException: println needs a message
                                                                                at android.util.Log.println_native(Native Method)
                                                                                at android.util.Log.i(Log.java:211)
                                                                                at com.netgalaxystudios.timeclock.RegisterSubscriptionActivity$1.onDataChange(RegisterSubscriptionActivity.java:80)
public class RegisterSubscriptionActivity extends Activity {

    private DatabaseReference mDatabase;
    private DatabaseReference mDatabaseMicro;

    ArrayList subscriptionInfo;

    //Subscription (String) values
    String micro, small, medium, large, enterprise;
    String mNum, sNum, medNum, lNum, eNum;
    String mPrice, sPrice, medPrice, lPrice, ePrice;


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

        subscriptionInfo = new ArrayList<>();


        //GET INSTANCE OF FIREBASE DB & GRAB SUBSCRIPTION DATA
        mDatabase = FirebaseDatabase.getInstance().getReference("Subscription");
        mDatabaseMicro = mDatabase.child("Micro");
        mDatabaseMicro.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) { //literally a "snapshot" of the data
                //dataSnapshot.

                for(DataSnapshot subscriptionDataSnapshot : dataSnapshot.getChildren()) {

                    if (subscriptionDataSnapshot.getKey().equals("mNum")) {
                        mNum= subscriptionDataSnapshot.getValue().toString();
                    }
                    if(subscriptionDataSnapshot.getKey().equals("mPrice")) {
                        mPrice = subscriptionDataSnapshot.getValue().toString();
                    }
                    if(subscriptionDataSnapshot.getKey().equals("micro")) {
                        micro = subscriptionDataSnapshot.getValue().toString();
                    }

                    Log.i("micro number", mNum);
                    //Log.i("micro price", mPrice);
                    Log.i("micro name", micro);

                    String subscriptions = subscriptionDataSnapshot.getValue(String.class); //Each time it gets the key/value pair per node
                    subscriptionInfo.add(subscriptions);


                }
错误指向这一行:Log.i(“micro name”,micro)


数据库: 正在使用的Firebase DB的图片


RegisterSubscriptionActivity.java

java.lang.NullPointerException: println needs a message
                                                                                at android.util.Log.println_native(Native Method)
                                                                                at android.util.Log.i(Log.java:211)
                                                                                at com.netgalaxystudios.timeclock.RegisterSubscriptionActivity$1.onDataChange(RegisterSubscriptionActivity.java:80)
public class RegisterSubscriptionActivity extends Activity {

    private DatabaseReference mDatabase;
    private DatabaseReference mDatabaseMicro;

    ArrayList subscriptionInfo;

    //Subscription (String) values
    String micro, small, medium, large, enterprise;
    String mNum, sNum, medNum, lNum, eNum;
    String mPrice, sPrice, medPrice, lPrice, ePrice;


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

        subscriptionInfo = new ArrayList<>();


        //GET INSTANCE OF FIREBASE DB & GRAB SUBSCRIPTION DATA
        mDatabase = FirebaseDatabase.getInstance().getReference("Subscription");
        mDatabaseMicro = mDatabase.child("Micro");
        mDatabaseMicro.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) { //literally a "snapshot" of the data
                //dataSnapshot.

                for(DataSnapshot subscriptionDataSnapshot : dataSnapshot.getChildren()) {

                    if (subscriptionDataSnapshot.getKey().equals("mNum")) {
                        mNum= subscriptionDataSnapshot.getValue().toString();
                    }
                    if(subscriptionDataSnapshot.getKey().equals("mPrice")) {
                        mPrice = subscriptionDataSnapshot.getValue().toString();
                    }
                    if(subscriptionDataSnapshot.getKey().equals("micro")) {
                        micro = subscriptionDataSnapshot.getValue().toString();
                    }

                    Log.i("micro number", mNum);
                    //Log.i("micro price", mPrice);
                    Log.i("micro name", micro);

                    String subscriptions = subscriptionDataSnapshot.getValue(String.class); //Each time it gets the key/value pair per node
                    subscriptionInfo.add(subscriptions);


                }
公共类注册表订阅活动扩展活动{
私有数据库参考数据库;
私有数据库引用mDatabaseMicro;
ArrayList subscriptionInfo;
//订阅(字符串)值
串微、小、中、大、企业;
字符串mNum、sNum、medNum、lNum、eNum;
字符串mPrice、sPrice、medPrice、lPrice、ePrice;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u register\u subscription);
subscriptionInfo=新的ArrayList();
//获取FIREBASE DB实例并获取订阅数据
mDatabase=FirebaseDatabase.getInstance().getReference(“订阅”);
mDatabaseMicro=mDatabase.child(“Micro”);
mDatabaseMicro.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(DataSnapshot DataSnapshot){//字面上是数据的“快照”
//数据快照。
对于(DataSnapshot subscriptionDataSnapshot:DataSnapshot.getChildren()){
if(subscriptionDataSnapshot.getKey().equals(“mNum”)){
mNum=subscriptionDataSnapshot.getValue().toString();
}
if(subscriptionDataSnapshot.getKey().equals(“mPrice”)){
mPrice=subscriptionDataSnapshot.getValue().toString();
}
if(subscriptionDataSnapshot.getKey().equals(“micro”)){
micro=subscriptionDataSnapshot.getValue().toString();
}
Log.i(“微编号”,mNum);
//Log.i(“微价格”,mPrice);
Log.i(“微型名称”,微型);
String subscriptions=subscriptionDataSnapshot.getValue(String.class);//每次获取每个节点的键/值对时
subscriptionInfo.add(订阅);
}

您的意思是将这些日志语句放在for循环之外吗?第一次通过循环时,它将在“mNum”上匹配,但
micro
仍将为空。

要获取
micro
节点下的数据,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference microRef = rootRef.child("Subscription").child("Micro");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String mNum = ds.child("mNum").getValue(String.class);
            String mPrice = ds.child("mPrice").getValue(String.class);
            String micro = ds.child("micro").getValue(String.class);
            Log.d("TAG", mNum + " / " + mPrice + " / " + micro);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
microRef.addListenerForSingleValueEvent(eventListener);
您的输出将是:

10 Employees / 25 / Micro

它的工作,但如果我有多个订阅节点,每个节点都有一个微型子节点,那么如何得到它?@ Makvin如果它工作,请考虑投票表决(@ Makvin)你的问题超出了这个问题的范围。请问另一个问题来解释这个问题,这样我或其他用户可以帮助你。