尝试从Firebase获取子项时应用程序崩溃

时间:2017-01-20 18:38:37

标签: firebase firebase-realtime-database

我的申请在第43行崩溃:

float value = dataSnapshot.child("temp").getValue(float.class);

当我从addChildEventListener和Datasnapshot中删除.child时,应用程序将显示数据库中的浮点值。

我的目标是显示一个浮点值,然后添加另一行以显示我的数据库将保存的Humidity值。

所以我将尝试。儿童(" temp")。孩子(" humi")将显示在列表视图上。

任何人都可以引导我朝着正确的方向前进,或者帮助我解决为什么我无法指定子条目。

ListView listview = (ListView) findViewById(R.id.listview);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, list);
    listview.setAdapter(adapter);

    //INITIALIZE FIREBASE DB
    db = FirebaseDatabase.getInstance().getReference();

    db.child("temp").limitToLast(1).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            float value = dataSnapshot.child("temp").getValue(float.class);
            list.add("System Temperture: " + value);
            adapter.notifyDataSetChanged();

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            adapter.clear();
            float value = dataSnapshot.child("temp").getValue(float.class);
            list.add("System Temperture: " + value);
            adapter.notifyDataSetChanged();

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

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

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

来自firebase的JSON值

{
  "humi" : {
    "-KaxKLD00Ib97d1dRbvR" : 17.0
  },
  "temp" : {
    "-KaxKL8G17y4ezfdBMDP" : 21.0
  }
}

logcat的

01-20 18:32:18.675 16935-16935/com.m.j.project.josephmay E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.m.j.project.josephmay, PID: 16935
                                                                       java.lang.NullPointerException: Attempt to invoke virtual method 'float java.lang.Float.floatValue()' on a null object reference
                                                                           at com.m.j.project.josephmay.MainActivity$1.onChildAdded(MainActivity.java:43)
                                                                           at com.google.android.gms.internal.zzblz.zza(Unknown Source)
                                                                           at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source)
                                                                           at com.google.android.gms.internal.zzboc$1.run(Unknown Source)
                                                                           at android.os.Handler.handleCallback(Handler.java:739)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:158)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:7229)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

01-20 18:32:26.645 16935-17099 / com.m.j.project.josephmay W / DynamiteModule:找不到com.google.firebase.auth的本地模块描述符类。 01-20 18:32:26.645 16935-17099 / com.mjproject.josephmay W / ResourcesManager:getTopLevelResources:/data/app/com.google.android.gms-1/base.apk / 1.0在com.mjproject中运行包com.google.android.gms的.josephmay rsrc

1 个答案:

答案 0 :(得分:0)

我认为我遇到了类似的问题,弗兰克的回应对我有帮助:https://groups.google.com/forum/#!topic/firebase-talk/-cdTDFBOmMw

在Firebase中创建新记录时,您是分别对“ humi”和“ temp”进行setValue()还是对整个对象进行setValue()?尝试将其切换为整个对象的setValue()。