Rohit
Rohit

Reputation: 27

Why the Entries are Looped Continuously in Firebase Database?

Here is the Firebase Database Screenshot

Image here

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

Answers (2)

Amit Tiwary
Amit Tiwary

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

Peter Haddad
Peter Haddad

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

Related Questions