简体   繁体   English

Firebase 登录没有任何反应

[英]Firebase Login nothing happens

I am trying to retrieve data stored (username & password) in my Firebase database.我正在尝试检索存储在我的 Firebase 数据库中的数据(用户名和密码)。 Whenever I click login, nothing happens.每当我点击登录时,什么也没有发生。

Could someone please tell me where I am going wrong?有人可以告诉我我哪里出错了吗? I've wasted countless hours already trying to find the answer.我已经浪费了无数个小时试图找到答案。 I have added the stack trace below, this is when I try to debug from user我在下面添加了堆栈跟踪,这是我尝试从user调试时


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

import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Color;
import android.net.wifi.ScanResult;
import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
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.Query;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();

    Button login, register;
    EditText et1, et2;
    TextView tv1;
    int count = 3;

    //Firebase database/reference variables.
    //FirebaseDatabase database;
    //DatabaseReference reference;

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

        login = (Button)findViewById(R.id.loginButtonHome);
        register = (Button) findViewById(R.id.registerButton);
        et1 = (EditText) findViewById(R.id.userLogin);
        et2 = (EditText) findViewById(R.id.userPassword);
        tv1 = (TextView) findViewById(R.id.textViewSignin);
        //login button on the app
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (validateUser() | validatePass()){
                } else{
                    user();
                }
            }
        });

    }

    public void loginButton(View view) {
    }

    private void user() {

        final String username = et1.getEditableText().toString().trim();
        final String password = et1.getEditableText().toString().trim();

        //reference to db in firebase
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("users");
        Query checkUser = reference.orderByChild("username").equalTo(username); reference.orderByChild("password").equalTo(password);
        checkUser.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if (snapshot.exists()){
                    String pwFromDB = snapshot.child(username).child("password").getValue(String.class);
                    if (pwFromDB.equals(password)){
                        Intent i = new Intent(MainActivity.this, ActivityArray.class);
                        startActivity(i);
                        Toast.makeText(getApplicationContext(), "Welcome...", Toast.LENGTH_SHORT).show();
                    }
                }
            }

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

            }
        });
    }

    public void registerButton(View view) {

        register.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                new NewUserActivity();
                if (view.isShown()){ //will hide register button after selection.
                    view.setVisibility(View.INVISIBLE);
                }else {
                    view.setVisibility(View.VISIBLE);
                }
                Toast.makeText(getApplicationContext(), "Redirecting to Register", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(MainActivity.this, NewUserActivity.class);
                startActivity(intent);

            }
        });

    }
    private Boolean validateUser (){
        String val = et1.getEditableText().toString();

        if (val.isEmpty()){
            et1.setError("Field Cannot Be Empty");
            return false;
        } else {
            et1.setError(null);
            return true;
        }
    }

    private Boolean validatePass () {
        String val = et2.getEditableText().toString();

        if (val.isEmpty()){
            et2.setError("Field Cannot Be Empty");
            return false;
        } else {
            et2.setError(null);
            return false;
        }
    }
    
}

Stack Trace Output堆栈跟踪输出

f stackTrace = {StackTraceElement[19]@3979}
•   Os {StackTraceElement@3983;> "libcore.io.Posix.stat(NativeMethod)" Navigate
•   1 s (StackTraceElement@3984) "libcore.io.BlockGuardOs.stat(BlockGuardOs.java:293)“ Navigate
•   2 s {StackTraceElement@3985; "java.io.File.isDirectory(File.java:522)" Navigate
•   3 s {StackTraceElement@3986} "dalvik.system.DexPathList.makePathElements(DexPathlistjava:232)“ Navigate
•   4 s {StackTraceElement@3987} ”dalvik.system.DexPathList<init>(DexPathlist.java:139)" Navigate
•   5 s {StackTraceElement@3988> "dalvik.system.BaseDexClassLoader.<init>(BaseDexClassloader.java:48)“ Navigate
•   6 s {StackTraceElement@3989> "dalvik.system.PathClassLoader.<init>(PathClassloader.java:65)" Navigate
•   7s {StackTraceElement@3990) "android.app.ApplicationLoaders.getClassLoader(Applicationloaders.java:58r Navigate
•   8 s {StackTraceElement@399l “android.app.loadedApk.getClassLoader(LoadedApkjava:376)“ Navigate
•   9 s {StackTraceElement@3992} ”android.app.LoadedApk.makeApplication(LoadedApk.java:568)" . Navigate
•   10 = (StackTraceElement@3993) “android.app.ActivityThread.handleBindApplication(ActivityThread.java:4680)" Navigate
•   11 s {StackTraceElement@3994j "android.app.ActivityThread.-wrap1(ActivityThread.java)‘ Navigate
•   12 = {StackTraceElement@3995j ”android.app.ActivityThreadSH.handleMessage(ActivityThreadjava:1405)“ .. Navigate
•   13 = {StackTraceElement@3996j "android.os.Handler.dispatchMessage(Handler.java:102)" Navigate
•   14 = (StackTraceElement@3997) "android.os.Looper.loop(Looper.java:148)M Navigate
•   15 = {StackTraceElement@3998] "android.app.ActivityThread.main(ActivityThread.java:5417)" Navigate
•   16 = (StackTraceElement@3999) "java.lang.reflectMethod.invoke(Native Method)" .. Navigate
•   17 = (StackTraceElement@4000) "com.android.internal.os.Zygotelnit$MethodAndArgsCaller.run(Zygotelnitjava:726)" Navigate
•   18 = (StackTraceElement@4001) -com.android.internal.os.Zygotelnit.main(Zygotelnit.java:616)“ Navigate

Try changing your onClick method to this one.尝试将您的 onClick 方法更改为这个方法。 You used |你用过 | insted of ||.插入 ||。 And if/else can be simplified if/else 可以简化

login.setOnClickListener(view -> {
    if (!(validateUser() || validatePass())) user();
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM