getter总是在android中返回

时间:2016-05-29 11:01:52

标签: java android firebase getter firebase-realtime-database

我最近开始学习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。

请为我的问题提供解决方案。

提前致谢!

2 个答案:

答案 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 类中的名称。