У меня есть приложение, в котором я использую firebase
для хранения своих данных.
Мои данные извлекаются во фрагменте с использованием метода OnDataChange
, и я добавляю данные в свою базу данных в виде отдельного действия.
Фрагмент как отдельный объект для извлечения данных отлично работает.Но когда я сразу добавляю данные в свою деятельность, этот фрагментный метод вызывается автоматически и сообщает, что my object-> datasnapshotobject.child("column_name") is null.
Я написал условие, чтобы проверить, что если datasnapshotobject.exists()
, то выполнять только дальнейшие шаги.Тем не менее, он обходит все вышеперечисленные строки и напрямую переходит на datasnapshotobject.child("column_name")
, что приводит к ошибке.Как я могу решить эту проблему?
Код для получения данных :
Firebase mref=new Firebase("https://robocon-89a7c.firebaseio.com/Competitions/");
mref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dsp:dataSnapshot.getChildren() )
{
if(dsp.exists() && dsp.child("city").getValue(String.class).equalsIgnoreCase("Pune"))
{
String start_date=dsp.child("start_date").getValue(String.class);
SimpleDateFormat curFormater = new SimpleDateFormat("dd-MM-yyyy");
try {
Date chkDate = curFormater.parse(start_date);
Calendar cal = Calendar.getInstance();
String date1 = cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1) +"-"+cal.get(Calendar.YEAR);
Date currentDate = curFormater.parse(date1);
if(chkDate.compareTo(currentDate)>=0){
myList.add("\n"+dsp.child("competitionName").getValue(String.class)+"\n"+dsp.child("institutionName").getValue(String.class)+"\n"+dsp.child("start_date").getValue(String.class)+" at "+dsp.child("start_time").getValue(String.class));
//System.out.println("The entered date is within the range of six months");
}
else{
System.out.println("The entered date is before than the current system date");
}
}
catch (ParseException e) {
e.printStackTrace();
}
}
}
String values[]=new String[myList.size()];
values=myList.toArray(values);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,values);
mylistView.setAdapter(adapter);
mylistView.setVisibility(View.VISIBLE);
// value=dataSnapshot.child("city").getValue(String.class);
// Toast.makeText(getApplicationContext(),"its "+value,Toast.LENGTH_SHORT).show();
//chck.setText(ansList.get(0)+ansList.get(1)+ansList.get(2));
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
Код для добавления данных:
Firebase firebase=new Firebase("https://robocon-89a7c.firebaseio.com/Competitions/");
Firebase mainEle=firebase.child(unid);
Firebase firebasechild=mainEle.child("competitionName");
firebasechild.setValue(competition);
Firebase firebasechild2=mainEle.child("institutionName");
firebasechild2.setValue(institutionN);
Таким образом я добавляюдругие столбцы и данные тоже, только некоторые из них предоставлены здесь.