I'm trying to validate a date in my app with firebase database. The situation is: I have a CalendarView, when I select a date, this date go to textview and when user click in button, I want to do the following validation if the date is in the database show a negative message, if the date isn't in the database save the date selected.
Here is the snippet of my code that is experiencing the error, the database and the error that appears.
On the android monitor, the error is
public class AgendarRecursoActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
String TAG = "AgendarRecursoActivity";
String nomeRecurso;
TextView txtData;
CalendarView calendario;
Recurso recurso;
TextView txtNome;
Button btnAgendarRecurso;
Spinner recursoSpinner;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_agendar_recurso);
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
//databaseReference = FirebaseDatabase.getInstance().getReference()
//.child("recursos").child(user.getUid()).child("");
calendario = (CalendarView) findViewById(R.id.calendarioRecurso);
txtData = (TextView) findViewById(R.id.txtDataCalendario);
txtNome = (TextView) findViewById(R.id.txtEmailUsuarioRecurso);
btnAgendarRecurso = (Button) findViewById(R.id.btnAgendarRecurso);
recursoSpinner = (Spinner) findViewById(R.id.spinner);
txtNome.setText(user.getEmail());
//txtData.setText("Data");
databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.child("recursos").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final List<String> recursoNome = new ArrayList<String>();
for (DataSnapshot recursoSnapshot : dataSnapshot.getChildren()) {
//Pega título do nó
String recursoSnap = recursoSnapshot.getKey();
//Adiciona na lista
recursoNome.add(recursoSnap);
}
//Pega lista e poe no spinner
ArrayAdapter<String> recursosAdapter = new ArrayAdapter<String>(AgendarRecursoActivity.this, android.R.layout.simple_spinner_item, recursoNome);
recursosAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
recursoSpinner.setAdapter(recursosAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
calendario.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
String date = dayOfMonth + "/" + (month + 1) + "/" + year;
Log.d(TAG, "onSelectedDayChange: " + date);
txtData.setText(date);
}
});
btnAgendarRecurso.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recurso = new Recurso();
recurso.setNomeUsuario(txtNome.getText().toString());
recurso.setDataRecurso(txtData.getText().toString());
recurso.setNomeRecurso(recursoSpinner.getSelectedItem().toString());
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
FirebaseUser user = mAuth.getCurrentUser();
databaseReference.child("recursos").child(recursoSpinner.getSelectedItem().toString()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot snapshot: dataSnapshot.getChildren()) {
if(snapshot.child("dataRecurso").getValue().toString().equals(recurso.getDataRecurso())){ //error in android monitor is here
Toast.makeText(AgendarRecursoActivity.this, "Data indisponível", Toast.LENGTH_SHORT).show();
}
else{
reservarRecurso();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
}
public void reservarRecurso(){
databaseReference.child("recursos").child(recursoSpinner.getSelectedItem().toString()).push().setValue(firebaseDatabase, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
//Problem with saving the data
if (databaseError != null) {
Toast.makeText(AgendarRecursoActivity.this, "Erro ao agendar recurso! Data não disponível", Toast.LENGTH_LONG).show();
} else {
//Data uploaded successfully on the server
databaseReference.child("nomeUsuario").setValue(txtNome.getText().toString());
databaseReference.child("dataRecurso").setValue(txtData.getText().toString());
Toast.makeText(AgendarRecursoActivity.this, "Recurso agendado com sucesso!", Toast.LENGTH_LONG).show();
retornaTela();
}
}
});
}
public void agendar(View v) {
calendario = (CalendarView) findViewById(R.id.calendarioRecurso);
SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
String dataRecurso = formatoData.format(new Date(calendario.getDate()));
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
nomeRecurso = parent.getItemAtPosition(position).toString();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
public void retornaTela(){
Intent intent = new Intent(this,MenuActivity.class);
startActivity(intent);
}
}
JSON Exported database
{
"recursos" : {
"Churrasqueira" : {
"-KvyL-Lqbk_2laoU6dHZ" : {
"dataRecurso" : "11/10/2017",
"nomeRecurso" : "Churrasqueira",
"nomeUsuario" : "d@d.com"
},
"-KvyQ1a0gkG-OYO4ru1-" : {
"dataRecurso" : "19/10/2017",
"nomeUsuario" : "d@d.com"
},
"-KvyZDPRNWOX4AJS3t2U" : {
"dataRecurso" : "26/10/2017",
"nomeUsuario" : "d@d.com"
},
"-Kw3HlJJGZeilpKZBhr8" : {
"dataRecurso" : "11/10/2017",
"nomeUsuario" : "d@d.com"
}
},
"Escada" : {
"-KvyMACClT8TnSU53NnT" : {
"dataRecurso" : "12/10/2017",
"nomeRecurso" : "Escada",
"nomeUsuario" : "d@d.com"
},
"-Kw016X_JxFzzZ9lSzS2" : {
"dataRecurso" : "17/10/2017",
"nomeUsuario" : "sthomazdasilva@gmail.com"
}
},
"Salão de festas" : {
"-KvyMDjHdL314aki28EI" : {
"dataRecurso" : "27/10/2017",
"nomeRecurso" : "Salão de festas",
"nomeUsuario" : "d@d.com"
}
}
}
}
Can help me, please?