我有一个没有意义的错误(对我来说,至少)。 在我的应用程序中,用户可以销售东西。所以我在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)
如果有人知道为什么会出现这个错误,那将会非常有帮助。这个问题让我头疼了一段时间。