Интеграция входа в Google, видимость кнопки входа не меняется при использовании метода UpdateUI - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь интегрировать функцию входа в Google для своего приложения. В основном работает нормально, и я могу войти в систему. Однако, когда пользователь вошел в систему, видимость кнопок входа должна быть ложной, а затем должен стать видимым LinearLayout, который включает в себя два текстовых представления и кнопку выхода из системы.

Вот кодосновной деятельности макета, которая имеет все текстовые представления, кнопки и т. д.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/prof_section"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="50dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/Prof_Pic"
            android:layout_width="90dp"
            android:layout_height="wrap_content"
            tools:srcCompat="@tools:sample/avatars" />

        <LinearLayout
            android:layout_width="255dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="28dp"
            android:layout_marginTop="20dp"
            android:layout_marginRight="20dp"
            android:orientation="vertical">

            <TextView
                android:id="@+id/Name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="Display name here"
                android:textSize="18dp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/Email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:gravity="center"
                android:text="Display email here"
                android:textSize="12dp"
                android:textStyle="bold" />

            <Button
                android:id="@+id/SignOut"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Logout"
                tools:layout_editor_absoluteX="159dp"
                tools:layout_editor_absoluteY="506dp" />
        </LinearLayout>
    </LinearLayout>
    <com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="60dp"
        android:layout_marginRight="50dp"
        android:layout_marginLeft="50dp"/>
</LinearLayout>

Вот файл основной активности со всем кодом

    private LinearLayout prof_section;
    private LinearLayout LsignIn;
    private Button SignOut;
    private SignInButton SignIn;
    private TextView Name,Email;
    private ImageView Prof_Pic;
    private GoogleApiClient GoogleApiClient;
    private static final int REQ_CODE = 9001;


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

        //setting variables as correct object
        prof_section = (LinearLayout)findViewById(R.id.prof_section);
        SignOut = (Button)findViewById(R.id.SignOut);
        SignIn = (SignInButton)findViewById(R.id.sign_in_button);
        Name = (TextView)findViewById(R.id.Name);
        Email = (TextView)findViewById(R.id.Email);
        Prof_Pic = (ImageView)findViewById(R.id.Prof_Pic);

        //register buttons for onclick listener
        SignIn.setOnClickListener(this);
        SignOut.setOnClickListener(this);

        //setting linearlayout and button to visible/invisible
        prof_section.setVisibility(View.GONE);
        SignIn.setVisibility(View.VISIBLE);

        GoogleSignInOptions SignInOptions = new  GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail  ().build();
        GoogleApiClient = new   GoogleApiClient.Builder(this).enableAutoManage(this,this).addApi(Auth.GOOGLE_  SIGN_IN_API,SignInOptions).build();

    }

    protected void onStart() {
        super.onStart();
    }

    @Override
    public void onClick(View v) {

        switch (v.getId())
        {
            case R.id.sign_in_button:
                SignIn();
                break;
            case R.id.SignOut:
                SignOut();
                break;

        }
    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult   connectionResult) {

    }

    private void SignIn() {
        Intent intent =  Auth.GoogleSignInApi.getSignInIntent(GoogleApiClient);
        startActivityForResult(intent,REQ_CODE);

    }

    private void SignOut() {
        Auth.GoogleSignInApi.signOut(GoogleApiClient).setResultCallback(new   ResultCallback<Status>() {
            @Override
            public void onResult(@NonNull Status status) {
                UpdateUI(false);
            }
        });

    }

    private void handleResult(GoogleSignInResult result) {
        if(result.isSuccess())
        {
            GoogleSignInAccount account = result.getSignInAccount();
            String name = account.getDisplayName();
            String email = account.getEmail();
            String img_url = account.getPhotoUrl().toString();
            Name.setText(name);
            Email.setText(email);
            //Glide.vith(this).load(img_url).into(Prof_Pic);
            UpdateUI(true);
        }
        else
        {
            UpdateUI(false);
        }

    }

    private void UpdateUI(boolean isLogin) {
        if(isLogin)
        {
            prof_section.setVisibility(View.VISIBLE);
            SignIn.setVisibility(View.GONE);
        }
        else
        {
            prof_section.setVisibility(View.GONE);
            SignIn.setVisibility(View.VISIBLE);
        }

У меня нет сообщений об ошибках при запускеприложение

1 Ответ

0 голосов
/ 22 октября 2019

Поскольку вы вызываете функцию activitywithresult (), которая возвращает результат, вы получите результат в onActivityResult (). Поскольку у вас нет обработчика Результата, вы не можете обработать результат. Вам нужно добавить onActivityResult (). Если вы получите результат их, то вы должны вызвать вашу функцию handleResult (), чтобы узнать, успешно ли пользователь вошел в систему или нет.

Просто добавьте этот код:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == REQ_CODE) {
        // The Task returned from this call is always completed, no need to attach
        // a listener.
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleResult(task);
    }
}

private void handleResult(Task<GoogleSignInAccount> completedTask) {
    try {
        GoogleSignInAccount account = completedTask.getResult(ApiException.class);
        String name = account.getDisplayName();
        String email = account.getEmail();
        String img_url = account.getPhotoUrl().toString();
        Name.setText(name);
        Email.setText(email);
        //Glide.vith(this).load(img_url).into(Prof_Pic);
        UpdateUI(true);

    } catch (ApiException e) {
        // The ApiException status code indicates the detailed failure reason.
        // Please refer to the GoogleSignInStatusCodes class reference for more information.
        Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
        UpdateUI(false);
    }
}
...