首先,我会发布一张图片,让你们更容易理解。
如您所见,有一个EditText和一个按钮。 我希望按钮将EditText的内容保存为字符串+开始一个新活动。
在下一个活动中,我想将字符串转换为整数。
这是我目前的代码:
SENDER ACTIVITY
startscore = (EditText) findViewById(R.id.startscore);
proceed = (Button) findViewById(R.id.bProceed);
proceed.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent myIntent = new Intent(Introscreen.this, BillardScoreboardActivity.class);
String s = startscore.getText().toString();
Bundle b = new Bundle();
b.putString("lol", s);
//put into your intent
myIntent.putExtras(b);
Introscreen.this.startActivity(myIntent);
}
});
}
接收活动
int counter1, counter2, counter3, counter4, counter5;
oncreate.....{
Bundle b = getIntent().getExtras();
String s = b.getString("lol");
column1tv = (TextView) findViewById(R.id.column1text);
column2tv = (TextView) findViewById(R.id.column2text);
column3tv = (TextView) findViewById(R.id.column3text);
column4tv = (TextView) findViewById(R.id.column4text);
column5tv = (TextView) findViewById(R.id.column5text);
column1tv.setText(counter1);
column2tv.setText(counter2);
column3tv.setText(counter3);
column4tv.setText(counter4);
column5tv.setText(counter5);
希望你能帮我解决问题,找出问题所在。
问题:
单击按钮后,它会关闭应用程序并向我提供这些错误代码:
02-23 15:01:24.136: E/AndroidRuntime(295): FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity
ComponentInfo{inno.games/inno.games.BillardScoreboardActivity}:
java.lang.NumberFormatException: unable to parse '' as integer
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NumberFormatException: unable to parse '' as integer
at java.lang.Integer.parseInt(Integer.java:412)
at java.lang.Integer.parseInt(Integer.java:382)
at inno.games.BillardScoreboardActivity.onCreate(BillardScoreboardActivity.java:35)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
... 11 more
答案 0 :(得分:3)
尝试将空字符串转换为整数时,它正在崩溃。将字符串传递给下一个活动时出现问题。尝试将字符串额外传递到包中:
Bundle b = new Bundle();
b.putString("key", string);
//put into your intent
yourIntent.putExtras(b);
然后在下一个活动中获取它:
Bundle b = getIntent().getExtras();
String s = b.getString("key");
您还需要切换TextView的声明以及设置它们。如果尚未声明它们,则无法设置它们。
编辑:还有一件事。我假设你 只 想要将整数输入到EditText中。您应该在其上设置inputType(如果尚未设置)。
编辑2:不要感到迟钝,我们一度都是初学者!首先,尝试使用一个包,看看你在EditText中输入的内容是否正确传递给下一个活动。
其次,在XML文件中为inputType
设置EditText
。应该是android:inputType="number"
之类的东西。
声明是这些行:
column1tv = (TextView) findViewById(R.id.column1text);
您正在为TextView创建一个对象。然后,你在这里设置它们:
column1tv.setText(counter1);
您必须先创建并实例化对象,然后才能对其执行任何操作。
编辑3: 好的,从您发布的屏幕截图中,我收集了以下内容:
首先 - 您正在创建对象counter1, counter2, etc..
,但您永远不会用任何东西对它们进行实例化。这可能是你获得最新例外的地方。
秒 - 您在String s = b.getString("lol");
上收到警告,因为它是未使用的本地变量。 (查看Eclipse中的Problems选项卡,您将看到代码中的警告/问题)。您没有对从上一个活动传递的字符串值做任何事情。
答案 1 :(得分:1)
尝试更改column1tv.setText(...)和column1tv =(TextView)findViewById(...)的顺序。
// Assign new View to columnt1tv
column1tv = (TextView) findViewById(R.id.column1text);
// change its appearance
column1tv.setText(counter1);
你也想设置一个R.id的数组,这样你就可以遍历这些重复的结构。
for( ... )
columnTv[i] = (TextView) findByView( R_columnText[i] );
使用数组简短样本进行简化。
class TheActivity extends Activity
{
// Resource group id's
private int R_columnTextIds[]={ R.id.column1text, R.id.column2text,
R.id.column3text, R.id.column4text};
TextView columnTv[]= new TextView[4];
// Now you can use loops.
onCreate.... {
.. get stuff and counter1
for(int i = 0; i< columnTv.length; i++){
columnTv[i] = (TextView) findByView( R_columnTextIds[i] );
columnTv[i].setText( counter1 );
}
答案 2 :(得分:0)
您的字符串肯定会在Intent
内正确传达,因为如果该名称 - 值对不存在,i.getStringExtra("lol")
将返回null
。 (顺便说一句,在尝试解析字符串中的整数之前,检查一下你得到的结果是null
是个好主意)。但是,似乎问题是你传递的字符串实际上是一个零长度的字符串,即“”,这意味着parseInt()
在尝试解析一个整数时会失败。
您需要做的就是让s
非 - final
,并在Intent
被触发之前将其添加到您的按钮监听器中:
s = startscore.getText().toString();
答案 3 :(得分:0)
当它可能为空时(在获取EditText之后),你得到startscore.getText().toString()
。所以,你发送的字符串是“”。试着在
myIntent.putExtra("lol", s);
在接收活动之后,您可以测试如下:
if(var != null && !TextUtils.isEmpty(var)) {
// deal with var
}
然后,您必须在Integer.parseInt()上尝试/捕获操作,因为如果String不是数字,它可以抛出NumberFormatException(因为var是“”,这是你的情况。)