Я создал приложение для входа пользователя в систему с помощью учетной записи Google.Я включил кнопку входа в действие, которое является MainActivity.Все прошло гладко, если я отображаю данные, полученные от пользователя для отображения в MainActivity.
MainActiviy.java:
</p>
<code>import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.squareup.picasso.Picasso;
public class MainActivity extends AppCompatActivity implements View.OnClickListener,GoogleApiClient.OnConnectionFailedListener {
static GoogleApiClient mGoogleApiClient;
private static final int RC_SIGN_IN = 12345; //semacam kunci
SignInButton signInButton;
Button btnOut,btnRevoke;
RelativeLayout lProfil;
TextView txNama,txEmail;
ImageView imgProfile;
String nama,email,url;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestId()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
signInButton = findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_STANDARD);
signInButton.setOnClickListener(this);
lProfil=findViewById(R.id.lprofil);
btnOut=findViewById(R.id.btn_signout);
btnOut.setOnClickListener(this);
btnRevoke=findViewById(R.id.btn_revoke);
btnRevoke.setOnClickListener(this);
txNama=findViewById(R.id.tx_nama);
txEmail=findViewById(R.id.tx_email);
imgProfile=findViewById(R.id.im_user);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
private void signOut() {
Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
updateUI(false);
}
});
}
private void revokeAccess() {
Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback(
new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
updateUI(false);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
private void handleSignInResult(GoogleSignInResult result) {
Log.d("RESPON", "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
Log.e("SUKSES", "display name: " + acct.getDisplayName());
nama= acct.getDisplayName().toString();
email = acct.getEmail().toString();
if (acct.getPhotoUrl() !=null){
url = acct.getPhotoUrl().toString();
}
txNama.setText(nama);
txEmail.setText(email);
Picasso.with(this)
.load(url)
.into(imgProfile);
updateUI(true);
} else {
updateUI(false);
}
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.sign_in_button:
signIn();
break;
case R.id.btn_signout:
signOut();
break;
case R.id.btn_revoke:
revokeAccess();
break;
}
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
private void updateUI(final boolean isSignedIn) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (isSignedIn) {
signInButton.setVisibility(View.GONE);
btnOut.setVisibility(View.VISIBLE);
btnRevoke.setVisibility(View.VISIBLE);
lProfil.setVisibility(View.VISIBLE);
} else {
signInButton.setVisibility(View.VISIBLE);
btnOut.setVisibility(View.GONE);
btnRevoke.setVisibility(View.GONE);
lProfil.setVisibility(View.GONE);
}
}
});
}
@Override
protected void onStart() {
super.onStart();
// Call GoogleApiClient connection when starting the Activity
mGoogleApiClient.connect();
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
if (account !=null) {
updateUI(true);
}
}
@Override
protected void onStop() {
super.onStop();
// Disconnect GoogleApiClient when stopping Activity
mGoogleApiClient.disconnect();
}
}
</code>
Но проблемазаключается в том, что мне нужно отображать пользовательские данные в другом действии / фрагменте, когда пользователь входит в MainActivity.
Как показать пользовательские данные, полученные из другого действия?