将字符串传输到新活动+将字符串转换为整数

时间:2012-02-23 21:34:48

标签: android string button android-activity

首先,我会发布一张图片,让你们更容易理解。

enter image description here

如您所见,有一个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

enter image description here

4 个答案:

答案 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是“”,这是你的情况。)