结果的启动活动导致崩溃
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);
}
我正在尝试学习 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);
}