首页 文章

从意图[重复]捕获数据时出现空指针错误

提问于
浏览
1

这个问题在这里已有答案:

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 回答

  • 1

    Stacktrace告诉您电子邮件引用为空(您可以轻松调试并输出此值以进行验证) . 我'm guessing something is wrong in your xml layout(s), for instance make sure you'在_activity_main_和_activity_signup_中没有使用相同的ID .

  • 3

    您应该使用 startActivityForResult(intent); 将数据恢复回 onActivityResult

相关问题