结果的启动活动导致崩溃

Startactivity for result with causes crash

我正在尝试学习 Android Studio,我的第一个应用程序是血液酒精计算器。用户启动该应用程序,然后启动一个新的 activity,以便他们可以输入他们的体重并按确定,这 returns 他们回到主 activity 并填写体重文本。

我用startActivityForResult,然后在第二个activity中用putExtra。如果我使用 getExtra 方法,第一个 activity 会崩溃,如果我删除 2 行接收代码,则不会崩溃。当我使用调试器时,它说 NullPointerException 就在它说 App 已停止工作

之前

主要activity代码

    public class MainActivity extends Activity {
      static int displayunit = 0;
      static double percentage = 5.0;
      static int change = 1;
      static double bah;
      static double vol = 25;
      static double timestamp = 0;
      static double w = 0;
      static String we = "a";
      final int rcode = 3;
      final String[] units = {"Small Shot(25ml)", "Large Shot(35ml)", "Small 
    Port/Sherry(50ml)", "Large Port/Sherry(70ml)", "Small Wine(125ml)", 
    "Large 
    Wine(175ml)", "Small Beer Bottle(284ml)", "Half Pint(236.6ml)", "Medium 
    Beer Bottle(330ml)", "Can of beer(440ml)", "Large Bottle(500ml)", 
    "Pint(568.26ml)", "Massive Beer Bottle(660ml)"};
    final int[] unitsum = {25, 35, 50, 70, 125, 175, 284, 237, 330, 440, 500, 
    569, 660};

      @Override

      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = new Intent();





 intent.setClassName("com.example.alccalc","com.example.alccalc.enterweight");
            if(w ==0){
             startActivityForResult(intent, rcode);
            }

      }

            @Override
            protected void onActivityResult ( int requstCode, int resultCode, 
    Intent intent){
                if (requstCode == rcode && resultCode == RESULT_OK) {
                    we = getIntent().getStringExtra("weighttext");
                    w = Double.parseDouble(we);
                }
                TextView kg = (TextView) findViewById(R.id.kg);
                kg.setText(we)

Second Activity

    public class enterweight extends Activity {

    EditText entweight;
    TextView tester;
    String weightstring;

    @Override
    protected void onCreate(Bundle State) {
    super.onCreate(State);
    setContentView(R.layout.activity_enterweight);

    entweight = (EditText) findViewById(R.id.entweight);
    tester = (TextView)findViewById(R.id.tester);


    Button okweight = (Button) findViewById(R.id.okweight);
    okweight.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            weightstring = entweight.getText().toString();
            //tester.setText(weightstring);

                Intent intent = new Intent();
                intent.putExtra
                        ("weighttext", weightstring);
                setResult(RESULT_OK, intent);
                if (intent.hasExtra("weighttext")) {
                    finish();
                }


        }
    });
    }
    }

在您的接收代码中试试这个

Intent intent= getIntent();
Bundle b =  intent.getExtras();
if(b != null)
we = b.getString("weighttext");

错误在这里getIntent();

由于您使用的是 onActivityResult ( int requstCode, int resultCode, Intent intent) 方法,因此您可以在变量 intent 中找到您的额外功能。方法 getIntent() returns 用于启动 activity 的意图。在你的情况下是 null.

使用:

we = intent.getStringExtra("weighttext");

而不是

we = getIntent().getStringExtra("weighttext");

更好:

        Bundle extras = intent.getExtras();
        if (extras != null) {
           String result = extras.getString("weighttext");
           .....
        }

您正在调用 getIntent() 以获取结果数据。 getIntent() 是一个 activity 方法,returns 一个用于启动 activity 的意图。您应该使用在 onActivityResult 方法上传递的 intent 变量。

if (requstCode == rcode && resultCode == RESULT_OK) { we = intent.getStringExtra("weighttext"); w = Double.parseDouble(we); }