在手机(j5)和模拟器(nexus 5)上同时打开应用程序后,我的应用程序就会崩溃。我把它提供给其他人尝试在他的计算机上运行,他说它确实可以打开,因此我不确定问题的根源是什么,我也没有发现错误(logcat中的红线很少,但我没有知道如何使用它...) 我是一个初学者,我使用Youtube教程(https://www.youtube.com/watch?v=9qcJk9DA4Sg)以此为基础构建应用程序。到目前为止,我只关注了第一部分,但是在视频结尾时,它似乎可以在他的设备上运行...
我不知道代码或设备是否有问题,所以这是代码。
package com.example.myapp;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.firebase.auth.FirebaseAuth;
public class MainActivity extends AppCompatActivity {
private FirebaseAuth fAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fAuth = FirebaseAuth.getInstance();
updateUI();
}
private void updateUI(){
if (fAuth.getCurrentUser() != null){
Log.i("MainActivity", "fAuth != null");
} else {
Intent startIntent = new Intent(MainActivity.this, StartActivity.class);
startActivity(startIntent);
finish();
Log.i("MainActivity", "fAuth == null");
}
}
}
package com.example.myapp;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.example.myapp.user_sign.RegisterActivity;
import com.google.firebase.auth.FirebaseAuth;
public class StartActivity extends AppCompatActivity {
private Button reg_btn, log_btn;
private FirebaseAuth fAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
reg_btn = findViewById(R.id.start_register_btn);
log_btn = findViewById(R.id.start_login_btn);
fAuth = FirebaseAuth.getInstance();
updateUI();
reg_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
register();
}
}); // end of onclick listener for sign up button
log_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
login();
}
}); // end of onclick listener for log in button
}
private void register(){
Intent regIntent = new Intent(StartActivity.this, RegisterActivity.class);
startActivity(regIntent);
}
private void login (){
}
private void updateUI() {
if (fAuth.getCurrentUser() != null){
Log.i("StartActivity", "fAuth != null");
Intent startIntent = new Intent(StartActivity.this, MainActivity.class);
startActivity(startIntent);
finish();
} else {
Log.i("StartActivity", "fAuth == null");
}
}
}
package com.example.myapp.user_sign;
import android.app.ProgressDialog;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.myapp.MainActivity;
import com.example.myapp.R;
import com.example.myapp.StartActivity;
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.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
public class RegisterActivity extends AppCompatActivity {
private Button btnReg;
private TextInputLayout inName, inEmail, inPassword;
private FirebaseAuth fAuth;
private DatabaseReference fUserDatabase;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
btnReg = findViewById(R.id.reg_btn);
inName = findViewById(R.id.input_reg_name);
inEmail = findViewById(R.id.input_reg_email);
inPassword = findViewById(R.id.input_reg_pswrd);
fAuth = FirebaseAuth.getInstance();
fUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
btnReg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String uname = inName.getEditText().getText().toString().trim();
String uemail = inEmail.getEditText().getText().toString().trim();
String upswrd = inPassword.getEditText().getText().toString().trim();
registerUser(uname, uemail, upswrd);
}
}); // end of register button on click listener
}
private void registerUser (final String name, String email, String pswrd) {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Processing request, please wait...");
progressDialog.show();
fAuth.createUserWithEmailAndPassword(email,pswrd).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
fUserDatabase.child(fAuth.getCurrentUser().getUid()).child("Basic").child("Name")
.setValue(name).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
progressDialog.dismiss();
Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class);
startActivity(mainIntent);
finish();
Toast.makeText(RegisterActivity.this, "User register successful!", Toast.LENGTH_SHORT);
} else {
progressDialog.dismiss();
Toast.makeText(RegisterActivity.this, "Error: " + task.getException().getMessage(), Toast.LENGTH_SHORT);
}
}
}); // Listener end
} else {
progressDialog.dismiss();
Toast.makeText(RegisterActivity.this, "Error: " + task.getException().getMessage(), Toast.LENGTH_SHORT);
}
}
});
}
}
2019-04-03 22:22:24.745 6061-6061/com.example.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapp, PID: 6061
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.MainActivity}: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.myapp. Make sure to call FirebaseApp.initializeApp(Context) first.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.myapp. Make sure to call FirebaseApp.initializeApp(Context) first.
at com.google.firebase.FirebaseApp.getInstance(SourceFile:218)
at com.google.firebase.auth.FirebaseAuth.getInstance(Unknown Source:1)
at com.example.myapp.MainActivity.onCreate(MainActivity.java:19)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)