我正在创建一个Android应用程序,我目前正在尝试使用Firebase实现用户身份验证。据我所知,我的应用已连接到我的Firebase服务器。
尝试通过按下按钮从SignIn活动切换到SignUp活动时遇到运行时错误。应用程序崩溃,我遇到运行时错误。
据我所知,当我尝试使用onCreate()
初始化FirebaseAuth
对象时,运行时错误来自SignUp活动的FirebaseAuth.getInstance()
调用。由于
java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process seniordesign.phoneafriend. Make sure to call FirebaseApp.initializeApp(Context).
但是,我在我的应用程序类中进行此调用'我认为会很好的onCreate()
方法。我已将initalizeApp()
电话添加到SignUp的onCreate()
来电,但没有骰子。我已经找到了这个问题的其他人,但没有找到类似的东西。谢谢你的帮助。
的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="seniordesign.phoneafriend">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name="seniordesign.phoneafriend.PhoneAFriend">
<activity android:name=".SignIn">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SignUp"></activity>
</application>
</manifest>
PhoneAFriend.java(我的应用程序类)
public class PhoneAFriend extends Application {
public void onCreate(){
super.onCreate();
Firebase.setAndroidContext(this);
FirebaseApp.initializeApp(this);
}
}
SignUp.java
public class SignUp extends AppCompatActivity {
protected Firebase ref;
protected EditText emailText;
protected EditText passText;
protected EditText confirmText;
protected Button button;
protected SignUp thisContext;
protected FirebaseAuth auth;
protected FirebaseAuth.AuthStateListener authListener;
private View.OnClickListener onClickListener;
public static Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
ref = new Firebase("https://phoneafriend-7fb6b.firebaseio.com");
emailText = (EditText) findViewById(R.id.signup_emailText);
passText = (EditText) findViewById(R.id.signup_passwordText);
confirmText = (EditText) findViewById(R.id.signup_passwordConfirm);
intent = new Intent(this, SignIn.class);
//Tried this already
//FirebaseApp.initializeApp(this);
auth = FirebaseAuth.getInstance();
button = (Button) findViewById(R.id.signup_button);
onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
createUser(view);
Log.v("SignUp Button" , "Clicked; Attempting to create user");
}
};
button.setOnClickListener(onClickListener);
authListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged( FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d("FirebaseAuth", "onAuthStateChanged:signed_in:" + user.getUid());
} else {
// User is signed out
Log.d("FirebaseAuth", "onAuthStateChanged:signed_out");
}
// ...
}
};
thisContext = this;
}
@Override
public void onStart(){
super.onStart();
//auth.addAuthStateListener(authListener);
}
@Override
public void onStop(){
super.onStop();
if(authListener != null) {
//auth.removeAuthStateListener(authListener);
}
}
protected void createUser(View view){
String cString = null;
String pString = null;
String eString = emailText.getText().toString();
if(passText.getText() != null && confirmText.getText() != null) {
pString = passText.getText().toString();
cString = confirmText.getText().toString();
Log.v("SignUP: Pass Null check" , "Pass" );
if (emailText.getText() != null && pString.equals(cString) && passText.getText() != null) {
Log.v("SignUP: Sign up check " , "Pass");
auth.createUserWithEmailAndPassword(emailText.getText().toString() , passText.getText().toString())
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.v("createUser complete" , "status: " + task.isSuccessful());
if(task.isSuccessful()){
startActivity(SignUp.intent);
}
}
});
}
}
return;
}
}
答案 0 :(得分:9)
我知道已经接受了答案。但是,我遇到了同样的错误消息:java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process (name). Make sure to call FirebaseApp.initializeApp(Context).
我尝试了在SO上找到的几个解决方案,并仔细检查所有内容,直到我最终发现Firebase控制台中定义的包名称与我的清单文件中定义的包名称不匹配。
尝试访问Firebase控制台 - &gt;项目设置 - &gt;检查包名是否匹配。
希望它可以帮助一些人:)
答案 1 :(得分:4)
正如qbix所说,你会使用任何版本的API调用。如果可能,您应该使用更新的API,因为它将来会得到更多的支持。
请参阅此处的文档:
https://firebase.google.com/docs/database/android/start/
卸下:
Firebase.setAndroidContext(this);
FirebaseApp.initializeApp(this);
然后说:
FirebaseDatabase database = FirebaseDatabase.getInstance();
如果qbix将他的评论写成答案,你应该接受他而不是我看到他几分钟后如何击败我。
同时强>
如果 使用旧的firebase并需要帮助切换,本指南即会发布,并将帮助您完成切换。这是一个相当简单的转换。
答案 2 :(得分:1)
删除并重新克隆了我的应用程序后,我忘记了将google-services.json包含在应用程序模块中,从而遇到了此问题。重新添加后,问题消失了。不过,您应该在自定义Application类中初始化上下文:
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
FirebaseApp.initializeApp(this)
}
}
<manifest
package="your.app">
<application
android:name=".MyApplication"
答案 3 :(得分:0)
使用 Android Studio 中包含的 Firebase向导会更容易:它会添加gradle文件中的所有依赖项,根据需要创建firebase项目,连接项目的应用程序等
在Android Studio中打开菜单工具/ Firebase ,然后按照说明操作。
然后FirebaseApp.initializeApp()将返回一个有效值。
答案 4 :(得分:0)
首先检查应该是Firebase文档和
中的工具Android Studio - &gt;工具 - &gt; Firebase - &gt;云消息传递。
即使您之前已经这样做过。
同样,即使您已经在之前已经这样做了,因为firebase版本往往需要最新的配置JSON。
答案 5 :(得分:0)
经过无奈后,启用Internet权限为我解决了此问题。
答案 6 :(得分:0)
在Gradle项目中将classpath 'com.google.gms:google-services:4.1.0'
升级到classpath 'com.google.gms:google-services:4.2.0'
对我来说很有效。
答案 7 :(得分:0)