Firebase datasnapshot getValue()在数据库中找不到特定数据

时间:2017-11-27 22:11:01

标签: java android firebase firebase-realtime-database

我有一个没有意义的错误(对我来说,至少)。 在我的应用程序中,用户可以销售东西。所以我在firebase数据库中存储他们想要出售的东西。这就是我的应用程序将数据写入firebase的方式:

“Items”类构造函数(Getters / Setters和String变量也在那里):

public Items (String title, String info, String photoItem, String userid){
    this.id = userid;
    this.title = title;
    this.info = info;
    this.photoItem = photoItem;
}

当用户创建新项目时,代码将运行:

if(!TextUtils.isEmpty(titleInfo) || !TextUtils.isEmpty(infoInfo)) {
            String id = databaseItems.push().getKey();

            Items items = new Items(titleInfo, infoInfo, imageEncoded, user.getUid());

            //Trenger fiks:
            databaseItems.child(id).setValue(items, new DatabaseReference.CompletionListener() {
                public void onComplete(DatabaseError error, DatabaseReference ref) {
                    if(error == null) {
                        Toast.makeText(NewItemsActivity.this, "Item Added!", Toast.LENGTH_SHORT).show();
                        startActivity(new Intent(NewItemsActivity.this, ProfileActivity.class));
                    }
                    else {
                        Log.d("Status:", "No databaseconnection");
                        Toast.makeText(NewItemsActivity.this, "Error: Something went wrong", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }

当用户创建新项目时,数据将显示在数据库中,如下所示:

"Items": {
  "Some key": {
    "Id": "The user ID",
    "title": "Some title",
    "photoitem": "Some string",
    "info": "Some info" 
}

以上所有内容都完美无缺,我还检索了数据并将其放入Recyclerview中。

问题是: 我想用Id做一些事情(这是firebase用户标识(.getUid()), 但由于某种原因,它返回null。

如果我不清楚,正确的user.getUid()会保存到数据库中,问题就是检索它。

这是我获取数据的地方:

private void prepareItemData() {
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference dbref = database.getReference();

    dbref.child("Items").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d(TAG, "in onChildAdded");
            if(dataSnapshot.exists()) {
                Log.d(TAG, "In postSnapshot");
                data.clear();
                for(DataSnapshot ds: dataSnapshot.getChildren()) {
                    Items item = ds.getValue(Items.class);
                    data.add(new Items(item.getTitle(), item.getInfo(), item.getPhotoItem(), item.getId()));
                    Log.d(TAG, item.toString());
                    Log.d(TAG, item.getTitle());
                    Log.d(TAG, item.getInfo());
                    Log.d(TAG, item.getPhotoItem());

                    // Cant find Id! 
                    // Log.d(TAG, item.getId());
                    // The app crashes when trying to log the item.getId() 

                }
                iAdapter.notifyDataSetChanged();
            }
        }

        @Override
        public void onCancelled(DatabaseError firebaseError) {

        }


    });

}

我正在记录标题,信息和照片项目,这些都打印出字符串。 但是如果我添加:Log.d(TAG,item.getId());,应用程序崩溃,并抛出NullPointerException。

这是错误:

FATAL EXCEPTION: main
Process: no.hiof.remir.smalltrades, PID: 23754
java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.d(Log.java:168)
at no.hiof.remir.smalltrades.Activities.MainActivity$4.onDataChange(MainActivity.java:204)
at com.google.firebase.database.Query$1.onDataChange(Unknown Source)
at com.google.android.gms.internal.zzbmz.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:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

如果有人知道为什么会出现这个错误,那将会非常有帮助。这个问题让我头疼了一段时间。

0 个答案:

没有答案