Reputation: 27
Here is the Firebase Database Screenshot
Here is my java code for MainActivity.java :
public class MainActivity extends AppCompatActivity {
EditText date, title, description, imageURL;
Button btn_click;
DatabaseReference databaseReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_click = findViewById(R.id.btn_click);
date = findViewById(R.id.date);
title = findViewById(R.id.title);
description = findViewById(R.id.description);
imageURL = findViewById(R.id.imgUrl);
databaseReference = FirebaseDatabase.getInstance().getReference("notifications");
Log.e("Reference is : ", String.valueOf(databaseReference));
btn_click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String d= date.getText().toString().trim();
String t= title.getText().toString().trim();
String desc= description.getText().toString().trim();
String i= imageURL.getText().toString().trim();
Model model = new Model(d,t,desc,i);
String id = databaseReference.push().getKey();
databaseReference.push().setValue(model);
Toast.makeText(MainActivity.this, "Submitted Successfully ", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(MainActivity.this, "Error Occured !", Toast.LENGTH_SHORT).show();
}
});
Here is the Model Class :
String date,desc,image,title;
public Model(){
}
public Model(String date, String desc, String image, String title) {
this.date = date;
this.desc = desc;
this.image = image;
this.title = title;
}
public String getDate() {
return date;
}
public String getDesc() {
return desc;
}
public String getImage() {
return image;
}
public String getTitle() {
return title;
}
Why are the Entries repeated in the Database and How can I avoid it ?
Upvotes: 1
Views: 63
Reputation: 797
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String d= date.getText().toString().trim();
String t= title.getText().toString().trim();
String desc= description.getText().toString().trim();
String i= imageURL.getText().toString().trim();
Model model = new Model(d,t,desc,i);
String id = databaseReference.push().getKey();
databaseReference.push().setValue(model);
Toast.makeText(MainActivity.this, "Submitted Successfully ", Toast.LENGTH_SHORT).show();
}
Here you are using addValueEventListener(). addValueEventListener keep listening to query or database reference it is attached to. So you are getting data when you add listener for first time and then you are pushing data to firebase at same node so addValueEventListener will again listen for new data and you will again push new data on firebase and this will happen again and again
Upvotes: 0
Reputation: 80944
Change this:
btn_click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String d= date.getText().toString().trim();
String t= title.getText().toString().trim();
String desc= description.getText().toString().trim();
String i= imageURL.getText().toString().trim();
Model model = new Model(d,t,desc,i);
String id = databaseReference.push().getKey();
databaseReference.push().setValue(model);
Toast.makeText(MainActivity.this, "Submitted Successfully ", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(MainActivity.this, "Error Occured !", Toast.LENGTH_SHORT).show();
}
});
Into this :
btn_click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
String d= date.getText().toString().trim();
String t= title.getText().toString().trim();
String desc= description.getText().toString().trim();
String i= imageURL.getText().toString().trim();
Model model = new Model(d,t,desc,i);
String id = databaseReference.push().getKey();
databaseReference.child(id).setValue(model);
Toast.makeText(MainActivity.this, "Submitted Successfully ", Toast.LENGTH_SHORT).show();
}
});
When adding data to the database, you don't need to use addValueEventListener
which is used for retrieving data.
Upvotes: 1