我最近开始学习Firebase。
向firebase添加数据是成功的,但在检索时遇到问题 来自firebase的数据。
我用于检索数据的getter方法总是返回 空。
我的 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;
}
}
pojos.getListname()和pojos.getOwner()始终为null。
请为我的问题提供解决方案。
提前致谢!
答案 0 :(得分: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
。
请参阅ValueEventListener的Firebase文档以获取更多信息。
答案 1 :(得分:0)
在POJOS pojos=new POJOS();
之后的 MainActivity 中,您没有为 pogos 对象设置任何值,而是在设置之前尝试获取值价值。尝试在 onDataChange 方法中使用POJOS pojos = new POJOS();
切换POJOS pojos = dataSnapshot.getValue(POJOS.class);
。它看起来像这样:
@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());
}
此外,请确保 Firebase 中的名称加载 POJOS 类中的名称。