Android 找不到KickoffActivity Firebase
我正在使用这个网站建立一个聊天应用程序,只是为了学习的目的 不幸的是,我最后总是出错。我发现了这个问题,但没有一个答案解决了我的问题 这是错误消息: 原因:android.content.ActivityNotFoundException:找不到显式活动类{com.myapp.user.chatatwork/com.firebase.ui.auth.KickoffActivity};您是否在AndroidManifest.xml中声明了此活动 我的Android 找不到KickoffActivity Firebase,android,firebase,android-gradle-plugin,firebase-authentication,firebaseui,Android,Firebase,Android Gradle Plugin,Firebase Authentication,Firebaseui,我正在使用这个网站建立一个聊天应用程序,只是为了学习的目的 不幸的是,我最后总是出错。我发现了这个问题,但没有一个答案解决了我的问题 这是错误消息: 原因:android.content.ActivityNotFoundException:找不到显式活动类{com.myapp.user.chatatwork/com.firebase.ui.auth.KickoffActivity};您是否在AndroidManifest.xml中声明了此活动 我的AndroidManifest.xml如下所示:
AndroidManifest.xml
如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.myapp.user.chatatwork">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/AppTheme"
android:supportsRtl="true"
tools:replace="android:value"
>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
</application>
编辑
这是Firebase中的KickoffActivity
类:
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class KickoffActivity extends HelperActivityBase {
private static final String TAG = "KickoffActivity";
private static final String IS_WAITING_FOR_PLAY_SERVICES = "is_waiting_for_play_services";
private static final int RC_PLAY_SERVICES = 1;
private boolean mIsWaitingForPlayServices = false;
public static Intent createIntent(Context context, FlowParameters flowParams) {
return ActivityHelper.createBaseIntent(context, KickoffActivity.class, flowParams);
}
@Override
protected void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
if (savedInstance == null || savedInstance.getBoolean(IS_WAITING_FOR_PLAY_SERVICES)) {
if (isOffline()) {
Log.d(TAG, "No network connection");
finish(ErrorCodes.NO_NETWORK,
IdpResponse.getErrorCodeIntent(ErrorCodes.NO_NETWORK));
return;
}
boolean isPlayServicesAvailable = PlayServicesHelper.makePlayServicesAvailable(
this,
RC_PLAY_SERVICES,
new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
finish(ResultCodes.CANCELED,
IdpResponse.getErrorCodeIntent(
ErrorCodes.UNKNOWN_ERROR));
}
});
if (isPlayServicesAvailable) {
SignInDelegate.delegate(this, mActivityHelper.getFlowParams());
} else {
mIsWaitingForPlayServices = true;
}
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
// It doesn't matter what we put here, we just don't want outState to be empty
outState.putBoolean(ExtraConstants.HAS_EXISTING_INSTANCE, true);
outState.putBoolean(IS_WAITING_FOR_PLAY_SERVICES, mIsWaitingForPlayServices);
super.onSaveInstanceState(outState);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_PLAY_SERVICES) {
if (resultCode == ResultCodes.OK) {
SignInDelegate.delegate(this, mActivityHelper.getFlowParams());
} else {
finish(ResultCodes.CANCELED,
IdpResponse.getErrorCodeIntent(ErrorCodes.UNKNOWN_ERROR));
}
} else {
SignInDelegate delegate = SignInDelegate.getInstance(this);
if (delegate != null) delegate.onActivityResult(requestCode, resultCode, data);
}
}
/**
* Check if there is an active or soon-to-be-active network connection.
*
* @return true if there is no network connection, false otherwise.
*/
private boolean isOffline() {
ConnectivityManager manager =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
return !(manager != null
&& manager.getActiveNetworkInfo() != null
&& manager.getActiveNetworkInfo().isConnectedOrConnecting());
}
}
更改此项:
implementation 'com.google.firebase:firebase-core:10.0.1'
compile 'com.firebaseui:firebase-ui:1.1.1'
至最新版本:
implementation 'com.firebaseui:firebase-ui-auth:3.3.0'
implementation 'com.firebaseui:firebase-ui-database:3.3.0'
implementation 'com.google.firebase:firebase-core:12.0.1'
更改此项:
implementation 'com.google.firebase:firebase-core:10.0.1'
compile 'com.firebaseui:firebase-ui:1.1.1'
至最新版本:
implementation 'com.firebaseui:firebase-ui-auth:3.3.0'
implementation 'com.firebaseui:firebase-ui-database:3.3.0'
implementation 'com.google.firebase:firebase-core:12.0.1'
出现以下错误:
Caused by: android.content.ActivityNotFoundException:
Unable to find explicit activity class {com.myapp.user.chatatwork/com.firebase.ui.auth.KickoffActivity};
have you declared this activity in your AndroidManifest.xml?
准确地告诉你问题是什么。您正在使用名为KickoffActivity
的活动,该活动未在AndroidManifest.xml
文件中声明。要解决此问题,请在
标记后面添加以下代码行
<activity android:name="com.firebase.ui.auth.KickoffActivity"/>
正如Peter在回答中提到的,将Firebase和Firebase UI依赖项更新到最新版本是一种非常好的做法。以下错误:
Caused by: android.content.ActivityNotFoundException:
Unable to find explicit activity class {com.myapp.user.chatatwork/com.firebase.ui.auth.KickoffActivity};
have you declared this activity in your AndroidManifest.xml?
准确地告诉你问题是什么。您正在使用名为KickoffActivity
的活动,该活动未在AndroidManifest.xml
文件中声明。要解决此问题,请在
标记后面添加以下代码行
<activity android:name="com.firebase.ui.auth.KickoffActivity"/>
正如Peter在回答中提到的那样,将Firebase和Firebase UI依赖项更新到最新版本是一个很好的做法。您同步、清理和重建了吗?是的,我完成了所有这些。什么都没用。它说“清单合并失败”,在日志中,有我上面提到的错误。
kickoffActivity
是firebase ui auth包中的一个类,可在此处找到:。每当您在项目的gradle文件中添加依赖项时,该库的活动都将添加到清单文件中。(此处详细说明:)这就是为什么在项目清单中添加库不起作用,最好的办法是更新所有内容。@Blnpwr您想在firebaseui中使用什么?(身份验证还是数据库?)活动位于firebaseui身份验证中,如果您只想使用数据库,请使用此compile'com.firebaseui:firebaseui数据库:3.3.0'
而不是compile'com.firebaseui:firebaseui:3.3.0'
,您不会遇到该错误“更新所有内容”是什么意思。在您的回答中,您有最新版本的firebase。还有什么需要更新的吗?我不明白。你同步、清理和重建了吗?是的,我做了所有这些。什么都没用。它说“清单合并失败”,在日志中,有我上面提到的错误。kickoffActivity
是firebase ui auth包中的一个类,可在此处找到:。每当您在项目的gradle文件中添加依赖项时,该库的活动都将添加到清单文件中。(此处详细说明:)这就是为什么在项目清单中添加库不起作用,最好的办法是更新所有内容。@Blnpwr您想在firebaseui中使用什么?(身份验证还是数据库?)活动位于firebaseui身份验证中,如果您只想使用数据库,请使用此compile'com.firebaseui:firebaseui数据库:3.3.0'
而不是compile'com.firebaseui:firebaseui:3.3.0'
,您不会遇到该错误“更新所有内容”是什么意思。在您的回答中,您有最新版本的firebase。还有什么需要更新的吗?我不明白。请共享您的KickoffActivity
类的一部分,包括程序包
名称和更改的AndroidManifest.xml
文件。请通过添加必要的代码来编辑您的问题。据我所知,应该自动添加此启动活动
,因为我使用的是Firebase,使用Firebase时会自动实现许多其他类。我没有任何KickoffActivity类。如果您使用Firebase,这并不意味着KickoffActivity
活动将自动添加到AndroidManifest.xml
文件中。是的,你有,或者这个错误不会出现。检查com.firebase.ui.auth
pacage以获取KickoffActivity.java文件。你能分享它的内容和更改的AndroidManifest.xml
文件吗?我用KickoffActivity类Alex编辑了这个问题。因为class KickoffActivity扩展了HelperActivityBase
这意味着KickoffActivity
类是一个活动。为了使其工作,您需要在AndroidManifest.xml
文件中声明此活动。您是否在AndroidManifest.xml
文件中添加了这一行?您还可以确认“com.firebase.ui.auth”
是KickoffActivity.java
文件的正确包吗?请共享您的KickoffActivity
类的一个示例,包括包名和更改的AndroidManifest.xml
文件。请通过添加必要的代码来编辑您的问题。据我所知,应该自动添加此启动活动
,因为我使用的是Firebase,使用Firebase时会自动实现许多其他类。我没有任何KickoffActivity类。如果您使用Firebase,这并不意味着KickoffActivity
活动将自动添加到AndroidManifest.xml
文件中。是的,你有,或者这个错误不会出现。检查com.firebase.ui.auth
pacage以获取KickoffActivity.java文件。你能分享它的内容和修改过的AndroidManifest.xml
文件吗?我用KickoffActivity类Alex编辑了这个问题。因为class KickoffActivity扩展了HelperActivityBase
这意味着KickoffActivity
类是一种行为