【发布时间】:2020-07-06 05:35:21
【问题描述】:
我正在为 firebase 制作一个管理面板应用程序。 但我无法从 firebase 检索管理员用户的数据。 当我按下登录按钮时应用程序崩溃。 有人可以提供从我的数据库中检索管理员数据的方法,并检查它是否与用户输入的凭据匹配。
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.capi.ccecommerceadmin.Model.Admin;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
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.Query;
import com.google.firebase.database.ValueEventListener;
public class LoginActivity extends AppCompatActivity
{
Button signIn;
EditText email, password;
String adminemail;
FirebaseAuth auth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
signIn = findViewById(R.id.login_btn);
email = findViewById(R.id.login_email);
password = findViewById(R.id.login_password);
auth = FirebaseAuth.getInstance();
final String str_email = email.getText().toString();
final String str_password = password.getText().toString();
signIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getAdmin(str_email, str_password);
}
});
}
private void getAdmin(final String str_email, final String str_password)
{
Query query = FirebaseDatabase.getInstance().getReference("Admins").orderByChild("isAdmin").equalTo(true);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
Admin admin = snapshot.getValue(Admin.class);
adminemail = admin.getEmail();
if (adminemail.equals(str_email))
{
auth.signInWithEmailAndPassword(str_email, str_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful())
{
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
else
{
Toast.makeText(LoginActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
else
{
Toast.makeText(LoginActivity.this, adminemail+" and "+str_email, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
我是安卓编程新手...
如果你想要其他课程,我也会发布它...................................... ......
.................................................. ..................................................... ..
这是我的数据库结构: https://i.stack.imgur.com/Ftt15.png
这是我的堆栈竞赛:
Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.capi.ccecommerceadmin.LoginActivity$2.onDataChange(LoginActivity.java:65)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6816)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1567)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1455)
2020-07-06 10:59:38.422 1839-27996/? E/KioskModeService: There's no matched data
2020-07-06 10:59:38.440 1839-27996/? E/KioskModeService: There's no matched data
2020-07-06 10:59:38.493 1839-27996/? E/SemDvfsHintManager: mHintTimeout : 500
2020-07-06 10:59:38.496 1839-27996/? E/ActivityManager: Found activity ActivityRecord{8dd224ad0 u0 com.capi.ccecommerceadmin/.SplashActivity t2398 f} in proc activity list using null instead of expected ProcessRecord{efa2eb4 8057:com.capi.ccecommerceadmin/u0a314}
2020-07-06 10:59:38.515 1839-1858/? E/ViewRootImpl: sendUserActionEvent() returned.
2020-07-06 10:59:38.592 1839-3440/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 104)
2020-07-06 10:59:38.597 1839-3440/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 108)
2020-07-06 10:59:38.598 9316-9316/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 92)
2020-07-06 10:59:38.614 755-843/? E/PBSessionCacheImpl: sessionId[3322118973208456] not persisted.
2020-07-06 10:59:38.665 1839-1943/? E/InputDispatcher: channel ~ Channel is unrecoverably broken and will be disposed!
2020-07-06 10:59:38.930 1839-1865/? E/WindowManager: Unhandled exception in Window Manager
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.android.server.wm.WindowAnimator.updateAppWindowsLocked(WindowAnimator.java:230)
at com.android.server.wm.WindowAnimator.animateLocked(WindowAnimator.java:1003)
at com.android.server.wm.WindowAnimator.-wrap0(WindowAnimator.java)
at com.android.server.wm.WindowAnimator$1.doFrame(WindowAnimator.java:185)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:928)
at android.view.Choreographer.doCallbacks(Choreographer.java:705)
at android.view.Choreographer.doFrame(Choreographer.java:637)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:916)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.android.server.ServiceThread.run(ServiceThread.java:46)
【问题讨论】:
-
堆栈跟踪在哪里
-
等一下,我发帖
-
记录这个 admin.getEmail() 并检查它返回的内容
标签: android firebase firebase-realtime-database