簡體   English   中英

無法從Firebase檢索數據

[英]data not retrieving from firebase

我正在嘗試從Firebase檢索數據,但是將valueEventListener應用於數據后,它顯示空數據, ShoppingList類userShopping中包含的值拋出空值

Firebase數據快照:

點擊查看圖片

ValueEventListener:

  mActiveValueListener = mActiveDatabaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    ShoppingList shoppingList=dataSnapshot.getValue(ShoppingList.class);
    Log.e(LOG_TAG,"is shopping list null:"+String.valueOf(shoppingList==null));
    if (shoppingList==null) {
        finish(); 
        return;
    }
    mShoppingList=shoppingList;

    mCurrentUserIsOwner= Utils.checkIfOwner(shoppingList,mEncodedEmail);

    Log.e(LOG_TAG,"Owner :"+String.valueOf(mCurrentUserIsOwner));
    invalidateOptionsMenu();
    setTitle(shoppingList.getListName());
    mActiveListItemAdapter.setShoppingList(mShoppingList);
    HashMap<String,Users> usersShopping=mShoppingList.getUserShopping();

    Log.e(LOG_TAG,"User is null: "+String.valueOf(usersShopping==null));


    if (usersShopping!=null && usersShopping.size()!=0 && usersShopping.containsKey(mEncodedEmail)){
        Log.e(LOG_TAG,"user shopping on");
        mShopping=true;
        mButtonShopping.setText(getString(R.string.button_stop_shopping));
        mButtonShopping.setBackgroundColor(ContextCompat.getColor(ActiveListDetailsActivity.this,R.color.dark_grey));
    }
    else{
        Log.e(LOG_TAG,"user shopping off");
        mButtonShopping.setText(getString(R.string.button_start_shopping));
        mButtonShopping.setBackgroundColor(ContextCompat.getColor(ActiveListDetailsActivity.this,R.color.primary_dark));
        mShopping=false;
    }

}

ShoppingList類:

public class ShoppingList {
    private String listName;
    private String owner;
    private HashMap<String, Object> timestampLastChanged;
    private HashMap<String,Users> userShopping;

    /**
     * Required public constructor
     */
    public ShoppingList() {
    }

    /**
     * Use this constructor to create new ShoppingLists.
     * Takes shopping list listName and owner. Set's the last
     * changed time to what is stored in ServerValue.TIMESTAMP
     *
     * @param listName
     * @param owner
     *
     */
    public ShoppingList(String listName, String owner, HashMap<String,Object> timestampLastChanged) {
        this.listName = listName;
        this.owner = owner;
        HashMap<String, Object> timestampLastChangedObj = new HashMap<String, Object>();
        timestampLastChangedObj.put(Constants.FIREBASE_PROPERTY_TIMESTAMP, ServerValue.TIMESTAMP);
        this.timestampLastChanged = timestampLastChangedObj;
        this.userShopping=new HashMap<String,Users>();

    }

    public String getListName() {
        return listName;
    }

    public String getOwner() {
        return owner;
    }


    public HashMap<String, Object> getTimestampLastChanged() {
        return timestampLastChanged;
    }


    @Exclude
    public long getTimestampLastChangedLong() {

        return (long) timestampLastChanged.get(Constants.FIREBASE_PROPERTY_TIMESTAMP);
    }

    public HashMap<String, Users> getUserShopping() {
        return userShopping;
    }
}

日志:

點擊查看圖片

Users類別:

public class Users {
    private String email;
    private String name;
    private HashMap<String,Object> timestampJoined;
    private boolean hasLoggedInWithPassword;

    public Users(){}

    public Users(String email,String name,HashMap<String,Object> timestampJoined)
    {
        this.email=email;
        this.name=name;
        this.timestampJoined=timestampJoined;
        this.hasLoggedInWithPassword=false;
    }

    public String getName() {
        return name;
    }

    public HashMap<String, Object> getTimestampJoined() {
        return timestampJoined;
    }

    public String getEmail() {
        return email;
    }

    public boolean isHasLoggedInWithPassword() {
        return hasLoggedInWithPassword;
    }
}

用這種方法

ShoppingList shoppingList=dataSnapshot.getValue(ShoppingList.class);

Firebase稱為空構造函數

public ShoppingList() {
}

因此,您的字段userShopping為null,從而使mShoppingList.getUserShopping()也為null。

我想如果您希望Firebase分配字段,則需要getter setter。

(如果該數據不在Firebase模型中,您將仍然為null)

在您的ShoppingList類中進行以下更改

private HashMap<String,Users> usersShopping;
public ShoppingList(String listName, String owner, HashMap<String,Object> timestampLastChanged) {
    //...
    this.usersShopping=new HashMap<String,Users>();

}

public HashMap<String, Users> getUsersShopping() {
    return usersShopping;
}

最好只在班級內部使用(Windows)

(CTRL + A) + (CTRL + R) [userShopping, usersShopping] -> [Replace All] 

如果要檢索所有購物清單,則應循環拋出快照,方法如下:

public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
 //Getting the data from snapshot 
ShoppingList  ShoppingList = postSnapshot.getValue(Person.class); 
    //Adding it to a string 
    String string = "Name: 
      "+shoppingList.getName()+"\nEmail: "+shoppingList.getEmail()+"\n\n";
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM