这个问题在这里已有答案:
MainActivity.java
正在接收 class .
Signup.java
是发件人类 .
从intent接收数据时出错 .
MainActivity.java - Receiving class
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
// Class Variables
private String name;
private String email;
private String img_url ;
// Controls
private TextView Email;
private TextView Name;
private ImageView prof_Pic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Name = (TextView) findViewById(R.id.profile_Name);
Email = (TextView) findViewById(R.id.profile_Email);
prof_Pic = (ImageView) findViewById(R.id.profile_Picture);
//Bundle extras = new Bundle();
//extras.getExtras()
//getIntent().getExtras();
Intent intent = getIntent();
Bundle extra = intent.getBundleExtra("gProfileRecord");
if (extra != null) {
String email= extra.getString("email");
Email.setText(email); **/* *** ERROR *** */**
String name = extra.getString("firstName");
Name.setText(name);
String img_url = extra.getString("profile_Pic");
Glide.with(this).load(img_url).into(prof_Pic);
}}
SignUp.java - Sender Class
public class Signup extends AppCompatActivity
implements View.OnClickListener, GoogleApiClient.OnConnectionFailedListener
{
// Variables for controls
private LinearLayout prof_layout;
private Button SignOut;
private TextView Name, Email, GivenName, FamilyName, PersonId;
private ImageView prof_pic;
// Some class variables
private String name;
private String email;
private String personGivenName;
private String personFamilyName;
private String personId;
private String img_url ;
// variables for Google SignIN process
private SignInButton SignIn;
private GoogleApiClient mGoogleApiClient;
private static final int REQ_CODE = 9001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
prof_layout = (LinearLayout) findViewById(R.id.profile_layout);
SignOut = (Button) findViewById(R.id.bn_logout);
SignIn = (SignInButton)findViewById(R.id.sign_in_button);
Name = (TextView) findViewById(R.id.name);
Email = (TextView) findViewById(R.id.email);
GivenName = (TextView) findViewById(R.id.given_Name);
FamilyName = (TextView) findViewById(R.id.family_name);
PersonId = (TextView) findViewById(R.id.person_id);
prof_pic = (ImageView) findViewById(R.id.profile_Pic);
// Event Listener
SignIn.setOnClickListener(this);
SignOut.setOnClickListener(this);
prof_layout.setVisibility(View.GONE);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.sign_in_button:
signIn();
break;
case R.id.bn_logout:
signOut();
break;
}
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
// Needed Methods
private void signIn(){
Intent intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(intent, REQ_CODE);
}
private void signOut() {
Auth.GoogleSignInApi.signOut(mGoogleApiClient).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();
if (account != null) {
// getting the data
// name = account.getDisplayName();
email = account.getEmail();
personGivenName = account.getGivenName();
personFamilyName = account.getFamilyName();
// personId = account.getId();
img_url = account.getPhotoUrl().toString();
// setting the data
/* Name.setText(name);
Email.setText(email);
GivenName.setText(personGivenName);
FamilyName.setText(personFamilyName);
PersonId.setText(personId);
Glide.with(this).load(img_url).into(prof_pic);*/
updateUI(true);
}
}else{
updateUI(false);
}
}
private void updateUI(boolean isLogin){
if(isLogin){
prof_layout.setVisibility(View.VISIBLE);
SignIn.setVisibility(View.GONE);
Toast.makeText(Signup.this, "Success !",
Toast.LENGTH_LONG).show();
Intent intent = new Intent(this, MainActivity.class);
Bundle extras = new Bundle();
extras.putString("email",email);
extras.putString("firstName",personGivenName);
// extras.putString("lastName",personFamilyName);
extras.putString("profile_Pic",img_url);
intent.putExtra("gProfileRecord",extras);
startActivity(intent);
}else {
Toast.makeText(Signup.this, "Failed !",
Toast.LENGTH_LONG).show();
SignIn.setVisibility(View.VISIBLE);
prof_layout.setVisibility(View.GONE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if(requestCode == REQ_CODE){
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleResult(result);
}
}
}
错误FATAL EXCEPTION:main进程:com.example.yash.lifecatalog_beatprocrastination,PID:12006 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.yash.lifecatalog_beatprocrastination / com.example.yash.lifecatalog_beatprocrastination.MainActivity}: java.lang.NullPointerException:尝试在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)的空对象引用上调用虚拟方法'void android.widget.TextView.setText(java.lang.CharSequence)' .app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)在android.app上的android.app.ActivityThread.-wrap11(未知来源:0)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1593) . 在android.app.Looper.loop(Looper.java:164)上的Handler.dispatchMessage(Handler.java:105)位于android.app.ActivityThread.main(ActivityThread.java:6541)的java.lang.reflect.Method.invoke (本地方法)在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:24) 0)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)引起:java.lang.NullPointerException:尝试调用虚方法'void android.widget.TextView.setText(java.lang.CharSequence) )'在android.app.Instrumentation.callActivityOnCreate上的android.app.Activity.performCreate(Activity.java:6975)的com.example.yash.lifecatalog_beatprocrastination.MainActivity.onCreate(MainActivity.java:50)上的空对象引用上 . Instrumentation.java:1213)在Android.app.A活动中的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)android.app.A活动 . )android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1593)在android.os.Handler.dispatchMessage(Handler.java:105)在android.os.Looper.loop(Looper.java:164)在android .app.ActivityThread.main(ActivityThread.java:6541)位于com.android.internal.os.Zygote的java.lang.reflect.Method.invoke(Native Method)$ MethodA ndArgsCaller.run(Zygote.java:240)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
2 回答
Stacktrace告诉您电子邮件引用为空(您可以轻松调试并输出此值以进行验证) . 我'm guessing something is wrong in your xml layout(s), for instance make sure you'在_activity_main_和_activity_signup_中没有使用相同的ID .
您应该使用
startActivityForResult(intent);
将数据恢复回onActivityResult