Как сохранить данные учетной записи, выбранной в диалоговом окне выбора учетной записи?

Код ниже показывает диалоговое окно выбора учетной записи в первый раз, когда я вхожу в свое приложение, а затем выбираю из него учетную запись. Но какую бы учетную запись я ни выбрал, я хочу показать ее данные (email_id,user_name,user_profile pic< /strong>) в заголовке панели навигации. Как отобразить сведения об учетной записи?? .

MainActivity.java

  public class MainActivity extends BaseActivity
        implements NavigationView.OnNavigationItemSelectedListener,
        GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    RecyclerView rvHome;
    RVAdapter rvAdapter;
    LinearLayoutManager llm;
    ArrayList<Doc> docs = new ArrayList<>();
    private boolean loading = true;
    private ProgressBar progressBar;
    private long numFound = 0;
    private boolean isFilter = false;
    private String category = "ad_category:3";
    private GoogleApiClient mGoogleApiClient;
    private ConnectionResult mConnectionResult;
    private static final int RC_SIGN_IN = 0;
    private boolean mIntentInProgress;
    private static final int PROFILE_PIC_SIZE = 400;
    CircleImageView profileImage;
    TextView userName;
    TextView userEmail;
    CallbackManager callbackManager;
    ProgressDialog progress;
    SharedPreferences sharedPreferences;
    private boolean isConnected;
    String SCOPE = "oauth2:https://www.googleapis.com/auth/userinfo.profile";
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        long startTime=System.currentTimeMillis();
        requestWindowFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        setTitle("Popular Design");
        setColorIndex();
        setColors(this, colorIndex);
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
        rvHome = (RecyclerView) findViewById(R.id.rv_home);
        llm = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false);
        rvHome.setLayoutManager(llm);
        rvAdapter = new RVAdapter(MainActivity.this);
        rvHome.setAdapter(rvAdapter);
        rvHome.addOnScrollListener(scrollListener);
        progressBar = (ProgressBar) findViewById(R.id.loading_progress);
        progress = new ProgressDialog(this);
        progress.setCancelable(false);
        MyShopApplication application = (MyShopApplication) getApplication();
        Tracker mTracker = application.getDefaultTracker();
        sharedPreferences = getSharedPreferences(AppConstants.USER_PREFERENCES, Context.MODE_PRIVATE);

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        View hView = navigationView.getHeaderView(0);
        navigationView.setCheckedItem(R.id.home);
        profileImage = (CircleImageView) hView.findViewById(R.id.imageView);
        userName = (TextView) hView.findViewById(R.id.user_name);
        userEmail = (TextView) hView.findViewById(R.id.user_email);
        userName.setText(sharedPreferences.getString(AppConstants.USER_NAME, ""));
        userEmail.setText(sharedPreferences.getString(AppConstants.USER_EMAIL, ""));
        String image_url = sharedPreferences.getString(AppConstants.USER_EMAIL, "");
        if (!image_url.trim().matches("")) {
            Picasso.with(this).load(image_url).into(profileImage);
        }
        checkPermissions();
        callbackManager = CallbackManager.Factory.create();
        mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(Plus.API)
                .addScope(Plus.SCOPE_PLUS_PROFILE)
                .build();
        Utils.TrackTiming(MyShopApplication.getInstance().getDefaultTracker(),AppConstants.ACTIVITY_LOAD,"MAIN_ACTIVITY",System.currentTimeMillis()-startTime,AppConstants.LOADED);

    }
}

activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

Navigation_drawer


person Samarth Kejriwal    schedule 03.10.2016    source источник


Ответы (1)


Затем вы должны начать процесс входа с помощью Intent.

public void startSignIn(){
    Intent signInIntent =     Auth.GoogleSignInApi.getSignInIntent(.   mGoogleApiClient);
            startActivityForResult(signInIntent,     GOOGLE_SIGN_IN);
}

Теперь реализуйте onActivityResult(), чтобы получить результат.

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

        // Result returned from launching the Intent.
        if (requestCode == GOOGLE_SIGN_IN && resultCode == RESULT_OK) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            handleSignInResult(result);
        }
    }

Теперь вы можете получить данные учетной записи из объекта результата.

private void     handleSignInResult(GoogleSignInResult result) {
    //Check if signin result is successful
    if (result.isSuccess()) {
        // Signed in successfully.
        GoogleSignInAccount acct =     result.getSignInAccount();
                testView.setText(acct.getDisplayName());
Uri profilePictureUri = acct.getPhotoUrl();
//You can get other details like email,Id etc.
      
    } else {
        // Signed out.
       
    }
}
person Darshan    schedule 03.10.2016
comment
Я должен вызывать эти методы и намерения в методе onCreate?? - person Samarth Kejriwal; 03.10.2016
comment
Вы можете вызвать startActivityReault() для события нажатия кнопки, если вы используете пользовательскую кнопку для входа в Google, я обновил ответ. - person Darshan; 03.10.2016
comment
Нет, я хочу, чтобы автоматически появлялось диалоговое окно, как только я открываю свое приложение, и оно запрашивает вход. И когда я выбираю учетную запись, она должна сохранять детали и отображать их в панели навигации. - person Samarth Kejriwal; 03.10.2016
comment
В этом случае вы можете вызвать метод startSignIn() в onCreate(), но обязательно вызывайте его после настройки GoogleApiClient. - person Darshan; 03.10.2016
comment
В приведенном выше коде диалоговое окно отображается автоматически, как только мое приложение открывается. Но я просто хочу знать, как сохранить эти данные учетной записи и показать их в заголовке навигации. - person Samarth Kejriwal; 03.10.2016
comment
Как только пользователь успешно войдет в систему, будет вызван метод onActivityResult(), вы можете просто реализовать методы onActivityResult() и handleSignInResult() из моего кода. - person Darshan; 03.10.2016
comment
У меня это не работает. Он показывает неверную ошибку запроса API. - person Samarth Kejriwal; 03.10.2016
comment
Это сработало. Я не добавлял API для входа в свой клиент API Google. Спасибо :) - person Samarth Kejriwal; 04.10.2016
comment
Я хотел спросить одну вещь: применяя приведенный выше код, всякий раз, когда я открываю свое приложение, я получаю FragmentDialog для загрузки данных учетной записи, если я нажимаю за пределами этого FragmentDialog перед загрузкой данных учетной записи, тогда данные моей учетной записи не отображаются, я должен ждать каждый раз, когда данные учетной записи загружаются, я хотел загрузить данные учетной записи в первый раз, когда я открываю свое приложение, и во второй раз, и так далее, он должен отображать данные учетной записи без загрузки FragmentDialog - person Samarth Kejriwal; 11.10.2016
comment
Вы можете использовать SharedPreferences для хранения пользовательских данных и проверить условие в методе onCreate(), чтобы проверить, сохранен ли уже userId, если он не сохранен, запустите код Google API для входа в систему, иначе не выполняйте вход в систему и напрямую извлекайте данные из SharedPreferences и загружайте свои представления. - person Darshan; 12.10.2016