Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何可以忽略应用程序中的活动?_Java_Android - Fatal编程技术网

Java 我如何可以忽略应用程序中的活动?

Java 我如何可以忽略应用程序中的活动?,java,android,Java,Android,我从**firebase设计了一个登录界面,我希望用户只登录一次,然后忽略登录界面** 公共类MainActivity扩展AppCompativeActivity实现GoogleAppClient.OnConnectionFailedListener、View.OnClickListener{ SignInButton signInButton; private FirebaseAuth mAuth; GoogleApiClient mGoogleApiClient; private stati

我从**firebase设计了一个登录界面,我希望用户只登录一次,然后忽略登录界面**

公共类MainActivity扩展AppCompativeActivity实现GoogleAppClient.OnConnectionFailedListener、View.OnClickListener{

SignInButton signInButton;
private FirebaseAuth mAuth;
GoogleApiClient mGoogleApiClient;
private static final int RC_SING_IN = 9001;
private static final String TAG = "SingInActivity";
private TextView textView;
private ImageView imgAvatar;

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

    // Configure Google Sign In
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, this)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();


    signInButton = (SignInButton) findViewById(R.id.busingin);

    signInButton.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.busingin:
            singIn();
            break;

    }
}

private void singIn() {
    Intent singInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(singInIntent, RC_SING_IN);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SING_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        handleSignInResult(result);
    }
}

private void handleSignInResult(GoogleSignInResult result) {
    Log.d(TAG, "handleSignInResult : " + result.isSuccess());
    if (result.isSuccess()) {
        GoogleSignInAccount acct = result.getSignInAccount();
        startActivity(new Intent(MainActivity.this, Main2Activity.class));
        firebaseAuthWithGoogle(acct);

        }
    }



@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    Log.d(TAG, "onConnecationFailed :" + connectionResult);
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    Log.d("TECSTORE", "firebaseAuthWithGoogle:" + acct.getId());

    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {

                    Log.d("TECSTORE", "signInWithCredential:onComplete:" + task.isSuccessful());

                    // If sign in fails, display a message to the user. If sign in succeeds
                    // the auth state listener will be notified and logic to handle the
                    // signed in user can be handled in the listener.
                    if (!task.isSuccessful()) {
                        Log.w("TECSTORE", "signInWithCredential", task.getException());

                    }
                }
            });
}
SignInButton SignInButton;
私人消防队;
GoogleapClient MGoogleapClient;
专用静态最终输入RC\u SING\u IN=9001;
私有静态最终字符串TAG=“SingInActivity”;
私有文本视图文本视图;
私有ImageView imgAvatar;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth=FirebaseAuth.getInstance();
//配置谷歌登录
GoogleSignenOptions gso=新建GoogleSignenOptions.Builder(GoogleSignenOptions.DEFAULT\u登录)
.requestEmail()
.build();
mgoogleapclient=新的Googleapclient.Builder(此)
.enableAutoManage(这个,这个)
.addApi(Auth.GOOGLE\u SIGN\u IN\u API,gso)
.build();
signInButton=(signInButton)findViewById(R.id.businging);
signInButton.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.Businging:
singIn();
打破
}
}
私人签名{
Intent singInIntent=Auth.GoogleSignInApi.getsigninent(mgoogleapclient);
startActivityForResult(singInIntent,RC_SING__IN);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==RC\u SING\u IN){
GoogleSignInResult结果=Auth.GoogleSignInApi.getSignInResultFromIntent(数据);
handleSignInResult(结果);
}
}
私有无效handleSignInResult(Google SignInResult结果){
Log.d(标记为“handleSignInResult:+result.issucess());
if(result.issucess()){
GoogleSignInAccount acct=result.getSignInAccount();
startActivity(新意图(MainActivity.this、Main2Activity.class));
firebaseAuthWithGoogle(acct);
}
}
@凌驾
public void onconnection失败(@NonNull ConnectionResult ConnectionResult){
Log.d(标记“OnConnectionFailed:+connectionResult”);
}
私有void firebaseAuthWithGoogle(谷歌签名帐户){
Log.d(“TECSTORE”、“firebaseAuthWithGoogle:+acct.getId());
AuthCredential credential=GoogleAuthProvider.getCredential(acct.getIdToken(),null);
mAuth.SIGNWITH凭证(凭证)
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
Log.d(“TECSTORE”,“signInWithCredential:onComplete:”+task.isSuccessful());
//如果登录失败,则向用户显示消息。如果登录成功
//将通知身份验证状态侦听器,并使用逻辑来处理
//可以在侦听器中处理已登录用户。
如果(!task.issusccessful()){
w(“TECSTORE”,“signInWithCredential”,task.getException());
}
}
});
}
}
我从firebase设计了一个登录界面,我希望用户只登录一次,然后忽略登录界面。

您可以使用
SharedReference
。 首先,当用户第一次输入凭据时,您将进入
SharedReference

//Create login session
private static final String IS_USER_LOGIN = "IsUserLoggedIn";
        public void createUserLoginSession(String name, String email){
            // Storing login value as TRUE
            editor.putBoolean(IS_USER_LOGIN, true);

            // Storing name in pref
            editor.putString(KEY_NAME, name);

            // Storing email in pref
            editor.putString(KEY_EMAIL, email);

            // commit changes
            editor.commit();
        } 
下次检查用户是否存在

// Check for login
        public boolean isUserLoggedIn(){
            return pref.getBoolean(IS_USER_LOGIN, false);
        }

 public boolean checkLogin(){
            // Check login status
            if(!this.isUserLoggedIn()){

                // user is not logged in redirect him to Login Activity
                Intent i = new Intent(YourCurrentActivity.this, LoginActivity.class);

                // Closing all the Activities from stack
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                // Add new Flag to start new Activity
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                // Staring Login Activity
                startActivity(i);

                return true;
            }
            return false;
        }

如果你懂阿拉伯语,请回答我,因为我英语不好,我不懂阿拉伯语。只要理解代码,你就会知道使用Gmail帐户登录的整个概念,而不是电子邮件。这并不是上述老问题的完全重复。这个问题特别与Firebase登录有关。虽然老的“复制”问题的解决方案是基于SharedReference的,但这不够安全,无法处理登录的详细信息。当然,这取决于开发者的决定。