我制作了一个应用程序来教自闭症儿童学习交流。此应用程序适用于有限用户,因此用户需要向管理员注册才能使用该应用程序。
用户将他们的生物数据,如姓名、机构和“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中的数据:在这里输入图像描述
首先,将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后,回答:我将和分别更改为和。但是我的中的提示错误,要求我实现其和方法 新手问题:我是否使用方法?!!