Значение не может быть удалено из базы данных в реальном времени - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь разработать приложение для Android, в котором я могу удалить значение, если оно там присутствует. Если значение удалено, оно должно дать значение true, а если значение там не присутствует, должно выдать ложную ошибку. Я использую базу данных Firebase в реальном времени.

Я пытаюсь сделать оператор if-else, но у меня ничего не получается

package com.vi.dhananjay.lol;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.view.View;
import android.widget.Button;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button del = (Button) findViewById(R.id.delButton);
        Button eb = (Button) findViewById(R.id.ebDelete);
        Button teac = (Button) findViewById(R.id.teaDelete);
        Button csd =  (Button) findViewById(R.id.conDelete);
        Button hosp = (Button) findViewById(R.id.hosDelete);

        TextView qrCode = (TextView) findViewById(R.id.qrCode);


        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            void deleDelete(DataSnapshot snapshot) {
                if (snapshot.hasChild("qrCode")) {
                    // run some code
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


        eb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                    ebDelete();
            }
        });
        teac.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                    teacDelete();
            }
        });
        csd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                    csdDelete();
            }
        });



        hosp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                hospDelete();
            }
        });

        del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                deleDelete();
            }
        });
    }

    private void deleDelete() {
        DatabaseReference qrcode = FirebaseDatabase.getInstance().getReference("delegates");
        qrcode.removeValue();
        Toast.makeText(this, "Code validated", Toast.LENGTH_LONG).show();
    }
    private void ebDelete() {
        DatabaseReference qrcode = FirebaseDatabase.getInstance().getReference("delegates");
        qrcode.removeValue();
        Toast.makeText(this, "Code validated", Toast.LENGTH_LONG).show();
    }
    private void teacDelete() {
        DatabaseReference qrcode = FirebaseDatabase.getInstance().getReference("delegates");
        qrcode.removeValue();
        Toast.makeText(this, "Code validated", Toast.LENGTH_LONG).show();
    }
    private void csdDelete() {
        DatabaseReference qrcode = FirebaseDatabase.getInstance().getReference("delegates");
        qrcode.removeValue();
        Toast.makeText(this, "Code validated", Toast.LENGTH_LONG).show();
    }
    private void hospDelete() {
        DatabaseReference qrcode = FirebaseDatabase.getInstance().getReference("delegates");
        qrcode.removeValue();
        Toast.makeText(this, "Code validated", Toast.LENGTH_LONG).show();

    }

}



Возникающая ошибка

: не является абстрактнойи не переопределяет абстрактный метод onDataChange (DataSnapshot) в ValueEventListener

1 Ответ

0 голосов
/ 06 октября 2019

Когда вы реализуете ValueEventListener, вы должны реализовать оба метода этого интерфейса: onDataChange и onCancelled. Кажется, вы изменили имя onDataChange на deleDelete, что означает, что компилятор больше не может найти onDataChange, что приводит к получаемой вами ошибке.

Чтобы устранить проблему, переименуйте deleDelete назад к onDataChange:

rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    void onDataChange(DataSnapshot snapshot) {
        if (snapshot.hasChild("qrCode")) {
            // run some code
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});

Если вы хотите использовать имя метода deleDelete для ясности, вы можете включить это в реализацию. Вам просто нужно убедиться, что вы по-прежнему используете onDataChange, иначе компилятор не знает, что делать.

Так что-то вроде:

rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    void onDataChange(DataSnapshot snapshot) {
        deleteDelete(snapshot)
    }

    void deleteDelete(DataSnapshot snapshot) {
        if (snapshot.hasChild("qrCode")) {
            // run some code
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});

Вы заметите, что deleteDelete здесь не помечено @Override, поскольку не переопределяет / не реализует метод из ValueEventListener.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...