在Firebase身份验证后启动MainActivity
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Firebase身份验证后启动MainActivity相关的知识,希望对你有一定的参考价值。
我已经研究过如何在登录后启动新活动,但每当我尝试实施新活动时,我的应用程序都会崩溃。
我得到了我的启动器类登录活动,提示通过用户名-pw / Facebook / Google进行身份验证。
现在我正在尝试在onActivityResult方法中启动新活动,但一直在崩溃。尝试了不同的方式来启动它,但现在我迷失了。
我设法在点击按钮后开始一个新的片段,或者开始一个新的活动,但是登录给了我麻烦。
谢谢你的帮助 - 非常感谢!
public class LoginActivity extends AppCompatActivity implements View.OnClickListener{
private static final int RC_SIGN_IN = 0;
private FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//everything for firebase
firebaseAuth = FirebaseAuth.getInstance();
if (firebaseAuth.getCurrentUser() != null) {
//user already signed in
Log.d("AUTH", firebaseAuth.getCurrentUser().getEmail());
} else {
startActivityForResult(AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(
Arrays.asList(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build(),
new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build()))
.build(),
RC_SIGN_IN);
}
findViewById(R.id.log_out_button).setOnClickListener(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
if (resultCode == RESULT_OK) {
//user logged in
Log.d("AUTH", firebaseAuth.getCurrentUser().getEmail());
Uri contentUri = data.getData();
startActivity(new Intent(this, MainActivity.class)
.setData(contentUri));
// Intent myIntent = new Intent(LoginActivity.this, MainActivity.class);
// LoginActivity.this.startActivity(myIntent);
/* TEST: START RANDOM FRAGMENT FROM THE ACTIVITY
android.support.v4.app.FragmentManager fragmentManager = LoginActivity.this.getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
TrainingFragment trainingFragment = new TrainingFragment();
fragmentTransaction.add(R.id.fragment_container, trainingFragment);
fragmentTransaction.commit();*/
}
else {
//user not authenticated
Log.d("AUTH", "NOT AUTHENTICATED");
}
}
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.log_out_button) {
AuthUI.getInstance()
.signOut(this)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.d("AUTH", "USER LOGGED OUT!");
//Fragment newFragment = new HomeFragment(); try to start new activity?
//switch to another fragment saying bye or some back next time or sth and then add a button with a "close app" function
/* android.support.v4.app.FragmentManager fragmentManager = LoginActivity.this.getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
TrainingFragment trainingFragment = new TrainingFragment();
fragmentTransaction.add(R.id.fragment_container, trainingFragment);
fragmentTransaction.commit(); */
finish(); //finish ends not only the activity, but the application, without it, the switch from activity to fragment functions :)
}
});
}
}
}
错误日志
D / AndroidRuntime:关闭VM E / AndroidRuntime:FATAL EXCEPTION:main进程:com.example.vreeni.firebaseauthentiction,PID:28367 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.vreeni.firebaseauthentiction / com。 example.vreeni.firebaseauthentication.MainActivity}:java.lang.IllegalStateException:此Activity已经有一个由窗口装饰提供的操作栏。不要在主题中请求Window.FEATURE_SUPPORT_ACTION_BAR并将windowActionBar设置为false以使用工具栏。在android.app.A活动中的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2822)android.app.A活动时,我发现android.app.A活动。 ActivityThread $ H.handleMessage(ActivityThread.java:1598)位于android.app.A.运行时,android.A.Ra上运行android.os.Hoper.loop(Looper.java:251)的android.os.Handler.dispatchMessage(Handler.java:105) (ActivityThread.java:6563)位于com.android.internal.os的com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)的java.lang.reflect.Method.invoke(Native Method) .ZygoteInit.main(ZygoteInit.java:767)引起:java.lang.IllegalStateException:此Activity已经有一个由窗口装饰提供的操作栏。不要在主题中请求Window.FEATURE_SUPPORT_ACTION_BAR并将windowActionBar设置为false以使用工具栏。位于android.support.v7.app7.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:129)的android.support.v7.app.AppCompatDelegateImplV9.setSupportActionBar(AppCompatDelegateImplV9.java:201)com.example.vreeni.firebaseauthentication.MainActivity.onCreate (MainActivity.java:26)在android.app.Anstrumentation.callActivityOnCreate(Instrumentation.java:1214)上的android.app.Activity.performCreate(Activity.java:6975)android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2775)在Android.app.A活动中的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2897) - android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1598)的android.app.ActivityThread.-wrap11(未知来源:0) android.os.Handler.dispatchMessage(Handler.java:105)位于android.app.Looper.loop(Looper.java:251),位于android.app.ActivityThread.main(ActivityThread.java:6563),位于java.lang.reflect .Method.invoke(Native Method)在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:2 40)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
好吧,显然它混淆了,因为我最初有两个独立的项目,我合并在一起。第一个活动和以下活动的样式文件中的主题包含有关actionBar的不同信息。另外,我还没有在Manifest中初始化第二个活动。只是一直盯着代码太长时间没注意到这一点。问题解决了:)
以上是关于在Firebase身份验证后启动MainActivity的主要内容,如果未能解决你的问题,请参考以下文章
Android:使用Firebase进行Facebook身份验证无法启动
为啥我必须在用户登录后使用 firebase 对用户进行身份验证?
使用 Firebase 身份验证进行身份验证后检索 Google 访问令牌