2016-05-29 3 views
1

Недавно я начал изучать Firebase.getter всегда возвращается в android

Добавление данных в базу огня успешно, но я сталкиваюсь с проблемами при получении данных от базы огня.

Методы получения, которые я использую для извлечения данных, всегда возвращают 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 Mach - имена в классе POJOS. –

+0

В вашей ** MainActivity ** после 'POJOS pojos = new POJOS();' вы не задавали никаких значений для объекта ** 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 doc для ValueEventListener, чтобы получить больше информации.

0

В вашем MainActivity после POJOS pojos=new POJOS(); вы не устанавливали значение в Погос объекта, который вы пытаетесь получить значение, прежде чем установить значение. Попробуйте переключить 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 Маха имена в Pojos класса.

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