Java 带有Firebase错误的FlashChat

Java 带有Firebase错误的FlashChat,java,android,database,firebase,login,Java,Android,Database,Firebase,Login,我正在尝试使用Firebase从“课程”构建一个flash聊天应用程序,但我一直在这个问题上陷入困境。非常感谢您的帮助。我也将发布我的应用程序Gradle文件。讲师可能正在使用一个过时的Android Studio,并且可能在Gradle文件中使用了旧的依赖项,因此在研究之后,我决定更改它,但它仍然不起作用。请帮助我完成这门课程。谢谢 05-09 09:17:44.777 2668-2668/com.lucianvibez.flashchatnewfirebase E/AndroidRuntim

我正在尝试使用Firebase从“课程”构建一个flash聊天应用程序,但我一直在这个问题上陷入困境。非常感谢您的帮助。我也将发布我的应用程序Gradle文件。讲师可能正在使用一个过时的Android Studio,并且可能在Gradle文件中使用了旧的依赖项,因此在研究之后,我决定更改它,但它仍然不起作用。请帮助我完成这门课程。谢谢

05-09 09:17:44.777 2668-2668/com.lucianvibez.flashchatnewfirebase E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.lucianvibez.flashchatnewfirebase, PID: 2668
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.lucianvibez.flashchatnewfirebase/com.online.lucianvibez.flashchatnewfirebase.LoginActivity}: java.lang.ClassNotFoundException: Didn't find class "com.online.lucianvibez.flashchatnewfirebase.LoginActivity" on path: DexPathList[[zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/base.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.lucianvibez.flashchatnewfirebase-1/lib/x86, /system/lib, /vendor/lib]]
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.online.lucianvibez.flashchatnewfirebase.LoginActivity" on path: DexPathList[[zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/base.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.lucianvibez.flashchatnewfirebase-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.lucianvibez.flashchatnewfirebase-1/lib/x86, /system/lib, /vendor/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2538)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6077) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
    05-09 09:18:15.891 2668-2761/com.lucianvibez.flashchatnewfirebase    
    E/FirebaseInstanceId: Token retrieval failed: SERVICE_NOT_AVAILABLE
    05-09 09:19:15.958 2668-2761/com.lucianvibez.flashchatnewfirebase  
    E/FirebaseInstanceId: Token retrieval failed: SERVICE_NOT_AVAILABLE
    05-09 09:20:45.975 2668-2761/com.lucianvibez.flashchatnewfirebase 
    E/FirebaseInstanceId: Token retrieval failed: SERVICE_NOT_AVAILABLE
下面是我的应用程序等级文件:

apply plugin: 'com.android.application'




    android {
        compileSdkVersion 27

defaultConfig {
    applicationId "com.lucianvibez.flashchatnewfirebase"
    minSdkVersion 16
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
   }

    dependencies {



implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:design:27.0.2'
implementation 'com.google.firebase:firebase-core:15.0.0'
implementation 'com.google.firebase:firebase-database:15.0.1'
implementation 'com.google.firebase:firebase-auth:15.1.0'
implementation 'com.google.android.gms:play-services-auth:15.0.0'


    }

    apply plugin: 'com.google.gms.google-services'
LoginActivity.java

package com.lucianvibez.flashchatnewfirebase;



public class LoginActivity extends AppCompatActivity {

    // TODO: Add member variables here:
    // UI references.
    private AutoCompleteTextView mEmailView;
    private EditText mPasswordView;

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

        mEmailView = (AutoCompleteTextView) findViewById(R.id.login_email);
        mPasswordView = (EditText) findViewById(R.id.login_password);

        mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
                if (id == R.integer.login || id == EditorInfo.IME_NULL) {
                    attemptLogin();
                    return true;
                }
                return false;
            }
        });

        // TODO: Grab an instance of FirebaseAuth

    }

    // Executed when Sign in button pressed
    public void signInExistingUser(View v)   {
        // TODO: Call attemptLogin() here

    }

    // Executed when Register button pressed
    public void registerNewUser(View v) {
        Intent intent = new Intent(this, com.lucianvibez.flashchatnewfirebase.RegisterActivity.class);
        finish();
        startActivity(intent);
    }

    // TODO: Complete the attemptLogin() method
    private void attemptLogin() {


        // TODO: Use FirebaseAuth to sign in with email & password



    }

    // TODO: Show error on screen with an alert dialog
package com.lucianvibez.flashchatnewfirebase;

    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.v7.app.AppCompatActivity;
    import android.text.TextUtils;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.View;
    import android.view.inputmethod.EditorInfo;
    import android.widget.AutoCompleteTextView;
    import android.widget.EditText;
    import android.widget.TextView;

    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;


public class RegisterActivity extends AppCompatActivity {

// Constants
public static final String CHAT_PREFS = "ChatPrefs";
public static final String DISPLAY_NAME_KEY = "username";

// TODO: Add member variables here:
// UI references.
private AutoCompleteTextView mEmailView;
private AutoCompleteTextView mUsernameView;
private EditText mPasswordView;
private EditText mConfirmPasswordView;

// Firebase instance variables

private FirebaseAuth  mAuth;


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

    mEmailView = (AutoCompleteTextView) findViewById(R.id.register_email);
    mPasswordView = (EditText) findViewById(R.id.register_password);
    mConfirmPasswordView = (EditText) findViewById(R.id.register_confirm_password);
    mUsernameView = (AutoCompleteTextView) findViewById(R.id.register_username);

    // Keyboard sign in action
    mConfirmPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
            if (id == R.integer.register_form_finished || id == EditorInfo.IME_NULL) {
                attemptRegistration();
                return true;
            }
            return false;
        }
    });

    // TODO: Get hold of an instance of FirebaseAuth

    mAuth = FirebaseAuth.getInstance();

}

// Executed when Sign Up button is pressed.
public void signUp(View v) {
    attemptRegistration();
}

private void attemptRegistration() {

    // Reset errors displayed in the form.
    mEmailView.setError(null);
    mPasswordView.setError(null);

    // Store values at the time of the login attempt.
    String email = mEmailView.getText().toString();
    String password = mPasswordView.getText().toString();

    boolean cancel = false;
    View focusView = null;

    // Check for a valid password, if the user entered one.
    if (TextUtils.isEmpty(password) || !isPasswordValid(password)) {
        mPasswordView.setError(getString(R.string.error_invalid_password));
        focusView = mPasswordView;
        cancel = true;
    }

    // Check for a valid email address.
    if (TextUtils.isEmpty(email)) {
        mEmailView.setError(getString(R.string.error_field_required));
        focusView = mEmailView;
        cancel = true;
    } else if (!isEmailValid(email)) {
        mEmailView.setError(getString(R.string.error_invalid_email));
        focusView = mEmailView;
        cancel = true;
    }

    if (cancel) {
        // There was an error; don't attempt login and focus the first
        // form field with an error.
        focusView.requestFocus();
    } else {
        // TODO: Call create FirebaseUser() here
        createFirebaseUser();

    }
}

private boolean isEmailValid(String email) {
    // You can add more checking logic here.
    return email.contains("@");
}

private boolean isPasswordValid(String password) {
    //TODO: Add own logic to check for a valid password (minimum 6 characters)

    String confirmPassword = mConfirmPasswordView.getText().toString();
    return confirmPassword.equals(password) && password.length() > 4;
}

// TODO: Create a Firebase user
private void createFirebaseUser(){
    String email = mEmailView.getText().toString();
    String password = mPasswordView.getText().toString();
    mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            Log.d("FlashChat", "createUser onComplete: " + task.isSuccessful());

            if (!task.isSuccessful()){
                Log.d("FlashChat", "user creation failed");
            }
        }
    });

}

// TODO: Save the display name to Shared Preferences


// TODO: Create an alert dialog to show in case registration failed




   }
RegisterActivity.java

package com.lucianvibez.flashchatnewfirebase;



public class LoginActivity extends AppCompatActivity {

    // TODO: Add member variables here:
    // UI references.
    private AutoCompleteTextView mEmailView;
    private EditText mPasswordView;

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

        mEmailView = (AutoCompleteTextView) findViewById(R.id.login_email);
        mPasswordView = (EditText) findViewById(R.id.login_password);

        mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
                if (id == R.integer.login || id == EditorInfo.IME_NULL) {
                    attemptLogin();
                    return true;
                }
                return false;
            }
        });

        // TODO: Grab an instance of FirebaseAuth

    }

    // Executed when Sign in button pressed
    public void signInExistingUser(View v)   {
        // TODO: Call attemptLogin() here

    }

    // Executed when Register button pressed
    public void registerNewUser(View v) {
        Intent intent = new Intent(this, com.lucianvibez.flashchatnewfirebase.RegisterActivity.class);
        finish();
        startActivity(intent);
    }

    // TODO: Complete the attemptLogin() method
    private void attemptLogin() {


        // TODO: Use FirebaseAuth to sign in with email & password



    }

    // TODO: Show error on screen with an alert dialog
package com.lucianvibez.flashchatnewfirebase;

    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.v7.app.AppCompatActivity;
    import android.text.TextUtils;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.View;
    import android.view.inputmethod.EditorInfo;
    import android.widget.AutoCompleteTextView;
    import android.widget.EditText;
    import android.widget.TextView;

    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;


public class RegisterActivity extends AppCompatActivity {

// Constants
public static final String CHAT_PREFS = "ChatPrefs";
public static final String DISPLAY_NAME_KEY = "username";

// TODO: Add member variables here:
// UI references.
private AutoCompleteTextView mEmailView;
private AutoCompleteTextView mUsernameView;
private EditText mPasswordView;
private EditText mConfirmPasswordView;

// Firebase instance variables

private FirebaseAuth  mAuth;


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

    mEmailView = (AutoCompleteTextView) findViewById(R.id.register_email);
    mPasswordView = (EditText) findViewById(R.id.register_password);
    mConfirmPasswordView = (EditText) findViewById(R.id.register_confirm_password);
    mUsernameView = (AutoCompleteTextView) findViewById(R.id.register_username);

    // Keyboard sign in action
    mConfirmPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
            if (id == R.integer.register_form_finished || id == EditorInfo.IME_NULL) {
                attemptRegistration();
                return true;
            }
            return false;
        }
    });

    // TODO: Get hold of an instance of FirebaseAuth

    mAuth = FirebaseAuth.getInstance();

}

// Executed when Sign Up button is pressed.
public void signUp(View v) {
    attemptRegistration();
}

private void attemptRegistration() {

    // Reset errors displayed in the form.
    mEmailView.setError(null);
    mPasswordView.setError(null);

    // Store values at the time of the login attempt.
    String email = mEmailView.getText().toString();
    String password = mPasswordView.getText().toString();

    boolean cancel = false;
    View focusView = null;

    // Check for a valid password, if the user entered one.
    if (TextUtils.isEmpty(password) || !isPasswordValid(password)) {
        mPasswordView.setError(getString(R.string.error_invalid_password));
        focusView = mPasswordView;
        cancel = true;
    }

    // Check for a valid email address.
    if (TextUtils.isEmpty(email)) {
        mEmailView.setError(getString(R.string.error_field_required));
        focusView = mEmailView;
        cancel = true;
    } else if (!isEmailValid(email)) {
        mEmailView.setError(getString(R.string.error_invalid_email));
        focusView = mEmailView;
        cancel = true;
    }

    if (cancel) {
        // There was an error; don't attempt login and focus the first
        // form field with an error.
        focusView.requestFocus();
    } else {
        // TODO: Call create FirebaseUser() here
        createFirebaseUser();

    }
}

private boolean isEmailValid(String email) {
    // You can add more checking logic here.
    return email.contains("@");
}

private boolean isPasswordValid(String password) {
    //TODO: Add own logic to check for a valid password (minimum 6 characters)

    String confirmPassword = mConfirmPasswordView.getText().toString();
    return confirmPassword.equals(password) && password.length() > 4;
}

// TODO: Create a Firebase user
private void createFirebaseUser(){
    String email = mEmailView.getText().toString();
    String password = mPasswordView.getText().toString();
    mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            Log.d("FlashChat", "createUser onComplete: " + task.isSuccessful());

            if (!task.isSuccessful()){
                Log.d("FlashChat", "user creation failed");
            }
        }
    });

}

// TODO: Save the display name to Shared Preferences


// TODO: Create an alert dialog to show in case registration failed




   }
package com.lucianvibez.flashchatnewfirebase;
导入android.os.Bundle;
导入android.support.annotation.NonNull;
导入android.support.v7.app.AppActivity;
导入android.text.TextUtils;
导入android.util.Log;
导入android.view.KeyEvent;
导入android.view.view;
导入android.view.inputmethod.EditorInfo;
导入android.widget.AutoCompleteTextView;
导入android.widget.EditText;
导入android.widget.TextView;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.firebase.auth.AuthResult;
导入com.google.firebase.auth.FirebaseAuth;
公共类注册活动扩展了AppCompatActivity{
//常数
公共静态最终字符串CHAT\u PREFS=“ChatPrefs”;
公共静态最终字符串显示\u NAME\u KEY=“username”;
//TODO:在此处添加成员变量:
//用户界面引用。
私有AutoCompleteTextView mEmailView;
私有自动完成文本视图mUsernameView;
私有编辑文本mPasswordView;
私有EditText mConfirmPasswordView;
//Firebase实例变量
私人消防队;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u寄存器);
mEmailView=(AutoCompleteTextView)findviewbyd(R.id.register\u email);
mPasswordView=(EditText)findViewById(R.id.register\u密码);
mConfirmPasswordView=(EditText)findViewById(R.id.register\u confirm\u password);
mUsernameView=(AutoCompleteTextView)findViewById(R.id.register\u用户名);
//键盘登录操作
mConfirmPasswordView.setOnEditorActionListener(新的TextView.OnEditorActionListener(){
@凌驾
公共布尔onEditorAction(TextView TextView、int id、KeyEvent KeyEvent){
if(id==R.integer.register_form_finished | | id==EditorInfo.IME_NULL){
尝试注册();
返回true;
}
返回false;
}
});
//TODO:获取FirebaseAuth的实例
mAuth=FirebaseAuth.getInstance();
}
//按下“注册”按钮时执行。
公共无效注册(视图五){
尝试注册();
}
私有无效注册(){
//重置表单中显示的错误。
mEmailView.setError(null);
mPasswordView.setError(null);
//在尝试登录时存储值。
字符串email=mEmailView.getText().toString();
字符串密码=mPasswordView.getText().toString();
布尔取消=假;
视图焦点视图=空;
//如果用户输入了有效密码,请检查密码是否有效。
if(TextUtils.isEmpty(密码)| |!isPasswordValid(密码)){
mPasswordView.setError(getString(R.string.error\u密码无效));
focusView=mPasswordView;
取消=真;
}
//检查有效的电子邮件地址。
如果(TextUtils.isEmpty(电子邮件)){
setError(getString(R.string.error_字段_必填));
focusView=mEmailView;
取消=真;
}如果(!isEmailValid(电子邮件)){
mEmailView.setError(getString(R.string.error\u无效的电子邮件));
focusView=mEmailView;
取消=真;
}
如果(取消){
//出现错误;请不要尝试登录并在第一次登录时集中注意力
//表单字段有错误。
focusView.requestFocus();
}否则{
//TODO:在此处调用create FirebaseUser()
createFirebaseUser();
}
}
私有布尔值isEmailValid(字符串电子邮件){
//您可以在此处添加更多检查逻辑。
返回电子邮件。包含(“@”);
}
私有布尔值isPasswordValid(字符串密码){
//TODO:添加自己的逻辑以检查有效密码(至少6个字符)
字符串confirmPassword=mConfirmPasswordView.getText().toString();
返回confirmPassword.equals(password)和&password.length()>4;
}
//TODO:创建Firebase用户
私有void createFirebaseUser(){
字符串email=mEmailView.getText().toString();
字符串密码=mPasswordView.getText().toString();
mAuth.createUserWithEmailAndPassword(电子邮件,密码).addOnCompleteListener(这是新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
Log.d(“FlashChat”,“createUser onComplete:+task.isSuccessful());
如果(!task.issusccessful()){
Log.d(“FlashChat”,“用户创建失败”);
}
}
});
}
//TODO:将显示名称保存到共享首选项
//TODO:创建警报对话框以在注册失败时显示
}
您的软件包上写着“com.lucianvibez.flashchatnewfirebase;”,您可以从崩溃日志中看到不同之处,日志上写着

未找到类“com.联机.lucianvibez.flashchatnewfirebase.LoginActivity”

请注意,您的软件包中缺少“online”(在线)


我怀疑您的清单文件中有online,因此当您的清单要求在不存在的路径中查找loginActivity时,应用程序会感到困惑。

原因:java.lang.ClassNotFoundException:未找到类“com.online.lucianvibez.flashchatnewfirebase.loginActivity”。你把它放在另一个包里了吗?没有。我将添加LoginActivity文件。请看,非常感谢。我记得重构后重新命名了整个包。在那段时间里,我可能意外地发生了一些事情。谢谢