2017-02-22 25 views
0

Я пытаюсь получить данные из Firebase, но он показывает нулевые данные после применения valueEventListener данных, значение, содержащиеся в ShoppingList классе userShopping метания нулевогоданные не загружая из firebase

Снимок из Firebase данных:

click to view the image

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; 
    } 
} 

Вход:

click to view the image

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; 
    } 
} 

ответ

0

С помощью этого метода

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

Firebase назвал пустой конструктор

public ShoppingList() { 
} 

Так что ваше поле userShopping равно нулю, что делает mShoppingList.getUserShopping() также нуль.

Я думаю, что вам нужны геттеры и сеттеры, если вы хотите, чтобы Firebase назначила поля.

(если эти данные не в модели Firebase, вы все равно получите нуль)

+0

спасибо за ваш ответ. The shoppingList is'nt null вы можете увидеть его в файле Log.e –

+0

Не тот ... 'Пользователь пуст:" + String.valueOf (usersShopping == null)) ' –

+0

Я добавил это public void setUserShopping (HashMap userShopping) { this.userShopping = userShopping; } –

0

В классе 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; 
} 

лучшие только внутри класса (окна)

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

спасибо за ваш ответ, Я тоже так пробовал, проблема не решена этим. –

0

вы должны цикл бросить снимок, если вы хотите получить весь список покупок, это то, как вы делаете так:

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"; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^