没有发送Android意图

时间:2017-09-06 16:19:47

标签: android firebase android-intent firebase-authentication

我在我的应用中使用了firebase auth。我正在检查用户是否在我的MainActivity上进行了身份验证,就像Firebase文档和Udacity课程中所述。

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

    firebaseAuth = FirebaseAuth.getInstance();
    final FirebaseUser user = firebaseAuth.getCurrentUser();
    if (user == null){
        loadLogIn();
    }
    authListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            if (user == null){
                loadLogIn();
            }
        }
    };

private void loadLogIn(){
    Intent intent = new Intent(MainActivity.this, LoginActivity.class);
    //Flags prevent user from returning to MainActivity when pressing back button
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);
}

当我使用调试器逐步执行代码时,一切运行良好,用户为null,因此调用loadLogIn方法,该方法发送intent,但Login Activity永远不会打开,并且因为它继续执行代码而导致崩溃需要用户进行身份验证。如果我的登录活动从未被调用,则为onCreate方法。我无法理解为什么意图没有执行/什么阻止它。之前已经过完美的测试和完成。

当执行意图行时,我在控制台上获得以下输出:

I/Timeline: Timeline: Activity_launch_request id:com.example.tobias.run time:2369840341

如果有帮助,这是我的表现:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET" />


<application
    android:allowBackup="true"
    android:name=".app.RunApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity
        android:name=".app.MainActivity"
        android:configChanges="orientation|screenSize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".editor.EditorActivity"
        android:parentActivityName=".app.MainActivity" />

    <activity
        android:name=".login.LoginActivity"
        android:screenOrientation="portrait"
        android:theme="@style/LoginTheme" />

    <activity
        android:name=".settings.SettingsActivity"
        android:parentActivityName=".app.MainActivity" />

    <activity
        android:name=".login.NewAccountActivity"
        android:screenOrientation="portrait"
        android:theme="@style/LoginTheme" />

    <activity android:name=".login.ForgotPasswordActivity"
        android:screenOrientation="portrait"
        android:theme="@style/LoginTheme"/>
</application>

当我尝试从我的应用中退出

时,这个问题首次出现
FirebaseAuth.getInstance().signOut();

用户已退出,但未发送意图,导致应用程序处于无效状态,然后在尝试执行需要用户的代码后崩溃了几秒钟。这不是我第一次退出应用程序,我已多次完成它并且有效。

这是一个奇怪的问题,我希望有人可以帮我找到错误。提前谢谢。

1 个答案:

答案 0 :(得分:1)

<强>问题:

                //...
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
               //...

<强>解决方案:

              //...    
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
             //...

当您使用setFlags时,您正在替换旧标志...当您使用addFlags时,您将附加新标记。请记住,flag只是一个2的幂的整数...在二进制中,标志看起来像这样:1,10,100,1000等......(在这种情况下是1,2, 4,8)。因此,addFlags所做的是使用|运算符追加您传递的整数。