当前位置: 首页 > 知识库问答 >
问题:

如何从firebase中检索数据以更改java中的变量

澹台硕
2023-03-14

我制作了一个应用程序来教自闭症儿童学习交流。此应用程序适用于有限用户,因此用户需要向管理员注册才能使用该应用程序。

用户将他们的生物数据,如姓名、机构和“disetujui”发送到Firebase数据库。

应用程序发送“disetujui”默认值为0的信息。

管理员接受数据后,管理员将值“disetujui”设置为1,这样用户就可以登录应用程序

现在,对于应用程序中的登录,我无法让应用程序知道值已更改为1,在检索数据后,应用程序中的值“disetujuiDb”仍然为0。

如何检索"disetujui"并在不同的方法中使用它?

接口:

    public interface LoginInterface<T> {
    void callback(T data);
}

型号:

class Tablet(val deviceId: String,
        val namaPenanggungJawab: String,
        val namaInstitusi: String,
        val noTelpYangDapatDihubungi: String,
        val email :String,
        val Disetujui: Int)

登录代码:

int disetujuiDb = 0;

private void disetujuiDb(@NonNull final LoginInterface<Boolean> finishedCallback){
        firebaseDatabase = FirebaseDatabase.getInstance();
        databaseReference = firebaseDatabase.getReference();
        @SuppressLint("HardwareIds") final String deviceId = Settings.Secure.getString(getApplicationContext().getContentResolver(),
                Settings.Secure.ANDROID_ID);
        databaseReference.child("Tablet").child(deviceId).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                finishedCallback.callback(dataSnapshot.child("disetujui").getValue().equals(1));
                Log.i("value_callback", String.valueOf(dataSnapshot.child("disetujui").getValue()));
            }

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

            }
        });
    }

    private boolean isValid() {
        String message = null;
        disetujuiDb(new LoginInterface<Boolean>() {
            @Override
            public void callback(Boolean data) {
                if (data) {
                    disetujuiDb = 1;

                }
            }
        });

        Log.i("value_disetujuidb",disetujuiDb+"");

        if (etUsername.getText().toString().equals(""))
            message = getString(R.string.username) + " belum diisi";
        else if (etPassword.getText().toString().equals(""))
            message = getString(R.string.password) + " belum diisi";
        else if (disetujuiDb == 0){
            message = "Tablet Belum Didaftarkan atau Menunggu dari Admin MIKA untuk di Konfirmasi";
        }


        if (message != null) {
            Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
        }

        return message == null;
    }

这里是Firebase中的数据:在这里输入图像描述

共有1个答案

都博裕
2023-03-14

首先,将finishedcallback更改为

FinishedCallback.callback(dataSnapshot.child("disetujui"). getValue(). toString(). equals("1"));

我试过你的代码. equals(1)返回false

这是因为调用是异步的,并且您的条件(如果else)在主线程上,所以在调用仍在进行时,条件会进行检查,并且可能尚未返回数据

尝试在调用回调后移动条件

disetujuiDb(new LoginInterface<Boolean>() {
      @Override
      public void callback(Boolean data) {
            if (data) {
                disetujuiDb = 1;
            }

            Log.i("value_disetujui", disetujuiDb + ""); // the value should be 1 now

            if (etUsername.getText().toString().equals(""))
                message = getString(R.string.username) + " belum diisi";
            else if (etPassword.getText().toString().equals(""))
                message = getString(R.string.password) + " belum diisi";
            else if (disetujuiDb == 0){
                message = "Tablet Belum Didaftarkan atau Menunggu dari Admin MIKA untuk di Konfirmasi";
            }
            if (message != null) {
               Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
            }
        }
    });
}

希望对你有帮助

 类似资料:
  • 我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地:

  • 我如何从所有userid都未知的医院中检索所有的hospitalNames。

  • 我正在两个标记之间画一条路线,我想保存那条路线。为此,我将包含lat和lng的ArrayList保存在Firebase数据库中。但我在取回航路点时遇到了问题。我是这样插入的: 在检索数据时,我尝试执行以下操作:

  • 我正在做一个项目,我想要一个功能,在WhatsApp上给我们留言,为此,我使用了使用intent的WhatsApp API。在“WhatsApp上向我们发送消息”功能中,我使用了2-3个不同的数字,并将其存储在列表中,并使用random()方法从列表中检索该数字,正如我所希望的那样,每当用户使用该功能时,他/她每次都必须连接不同的数字。但现在我想更改列表中存储的数字。 那么,我如何在每次不改变实际

  • 我试图实现一对一聊天使用firebase实时数据库,我插入消息与senderid,Recieverid,消息,日期,sendername,Recievername,在我的情况下,不同的用户是不同的聊天室,我需要展示这个聊天室一对一聊天室我如何实现在我的android应用程序 下面是我检索数据的代码 但这段代码从聊天室获取所有数据,但我需要排除发送者名和接收者名相等的消息,sendername是从应

  • 服务器的响应如下所示: 如何从响应中检索? 实现@Piyush Patel后,回答:我将和分别更改为和。但是我的中的提示错误,要求我实现其和方法 新手问题:我是否使用方法?!!