簡體   English   中英

getter 總是在 android 中返回

[英]getter always returns in android

我最近開始學習 Firebase。

將數據添加到 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;
}

}

pojos.getListname() 和 pojos.getOwner() 始終為空。

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

提前致謝 !

嘗試更改您的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 文檔。

POJOS pojos=new POJOS();后的MainActivity 中POJOS pojos=new POJOS(); 您沒有為pogos對象設置任何值,而是在設置值之前嘗試獲取值。 嘗試切換POJOS pojos = new POJOS(); 使用POJOS pojos = dataSnapshot.getValue(POJOS.class); onDataChange方法中。 它看起來像這樣:

@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 Mach 中的名稱與POJOS類中的名稱相同

暫無
暫無

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

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