2017-09-06 51 views
0

MainActivity.java正在接收类。从意图获取数据时的空指针错误

Signup.java是Sender类。

从意向接收数据时发生错误。

MainActivity.java - 收货类

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 - 发件人类

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); 
       } 
      } 
     } 

错误

致命异常:主要 临cess: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上的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) 上的null对象引用 上调用虚拟方法'void android.widget.TextView.setText(java.lang.CharSequence)'。 app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread $ H.handle消息(ActivityThread.java:1593) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main( ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal .os.ZygoteInit.main(ZygoteInit.java:767) 原因:java.lang.NullPointerException:试图调用虚拟方法'void android.widget.TextView.setText(java。 lang.CharSequence)'在null对象引用 at com.example.yash.lifecatalog_beatprocrastination.MainActivity.onCreate(MainActivity.java:50) at android.app.Activity.performCreate(Activity.java:6975) at android .app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 在android.app .ActivityThread.-wrap11(Unknown Source:0) at 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) 在java.lang.reflect.Method中。调用(本地方法) 在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

回答

2

你应该使用startActivityForResult(intent);获取数据回onActivityResult

+0

工作就像一个魅力! –

+0

最受欢迎:) –

+1

接受它作为回答布鲁 – Orvenito

1

堆栈跟踪告诉你电子邮件参考为空(你可以很容易地调试和输出该值来验证它)。我猜你的xml布局有问题,例如确保你在_activity_main_和_activity_signup_中没有使用相同的id。