2016-05-29 38 views
1

我最近開始學習Firebase。getter總是在android中返回

將數據添加到Firebase是成功的,但我在從Firebase檢索 數據時遇到問題。

我用於檢索數據的getter方法總是返回 null。

MainActivity.java如下:

public class MainActivityFragment extends Fragment { 

TextView time_stamp; 


public MainActivityFragment() { 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
final View rootView=inflater.inflate(R.layout.fragment_main, container, 
false); 
    final TextView owner=(TextView)rootView.findViewById(R.id.owner); 
    time_stamp=(TextView)rootView.findViewById(R.id.time_stamp_textView); 
    final TextView changed_data_view=(TextView)rootView.findViewById(R.id.changedView); 

    Firebase mRef=new Firebase(Constants.FirebaseUrl).child("activeList"); 
    mRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

     POJOS pojos=new POJOS(); 
      changed_data_view.setText(pojos.getListname()); 
      Log.i("LIST",pojos.getListname()); 
      Log.i("OWNER",pojos.getOwner()); 

      owner.setText(pojos.getOwner()); 


     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 

    return rootView; 
    } 
} 

我的POJO類如下:

public class POJOS { 

public String listname; 
public String owner; 

public POJOS() { 
} 

public POJOS(String listname, String owner) { 
    this.listname = listname; 
    this.owner = owner; 
} 

public String getListname(){ 
    return listname; 
} 

    public String getOwner() { 
    return owner; 
    } 


} 

我添加的物品類別如下:

public class Dialog extends DialogFragment { 


private final String title="ADD AN ITEM"; 
private EditText editText; 
Button addButton; 


public Dialog(){ 

} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
getDialog().setTitle(title); 
    View rootView=inflater.inflate(R.layout.dialog_box,null); 

    editText=(EditText)rootView.findViewById(R.id.editText); 
    addButton=(Button) rootView.findViewById(R.id.addButton); 
    addButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String userEnteredName=editText.getText().toString(); 
      Firebase firebase=new Firebase(Constants.FirebaseUrl); 
      POJOS pojos =new POJOS(userEnteredName,"ANONYMOUS USER"); 

      firebase.child("activeList").setValue(pojos); 

      dismiss(); 



     } 
    }); 



    return rootView; 
} 

} 

the pojos.g etListname()和pojos.getOwner()始終爲空。

請提供我的問題的解決方案。

在此先感謝!

+0

確保Firebase中的名稱加快POJOS類中的名稱。 –

+0

在POJOS pojos = new POJOS()之後的** MainActivity **中,您沒有爲** pogos **對象設置任何值,您正在嘗試在設置該值之前獲取一個值。先嚐試'POJOS pojos = dataSnapshot.getValue(POJOS.class);'。 –

回答

1

試圖改變自己的onDataChange(..)方法如下:

... 
@Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
    //POJOS pojos = new POJOS(); // This is create only blank object of POJOS so you are getting null value 
// Get POJOS object and use the values to update the UI 
POJOS pojos = dataSnapshot.getValue(POJOS.class); 
     changed_data_view.setText(pojos.getListname()); 
     owner.setText(pojos.getOwner()); 
     Log.i("LIST",pojos.getListname()); 
     Log.i("OWNER",pojos.getOwner()); 

    } 
    ... 

聽衆接受一個DataSnapshot包含在事件發生的時間在數據庫中的指定位置的數據。在快照上調用getValue()將返回數據的Java對象表示形式。如果在該位置不存在數據,則呼叫getValue()返回null

請參閱Firebase文檔ValueEventListener以瞭解更多信息。

0

在你MainActivityPOJOS pojos=new POJOS();後,您沒有設置任何值的的POGO對象,你想你所設置的值之前得到的值。嘗試在onDataChange方法中切換POJOS pojos = new POJOS();與​​。它看起來是這樣的:

@Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      POJOS pojos = dataSnapshot.getValue(POJOS.class); 
      changed_data_view.setText(pojos.getListname()); 
      Log.i("LIST",pojos.getListname()); 
      Log.i("OWNER",pojos.getOwner()); 
      owner.setText(pojos.getOwner()); 
     } 

此外,確保該名在火力地堡馬赫的名字在POJO。類。

相關問題