2

我想从 player.java 到 player_name.java 接收我的数组值。当我单击 player_name.java 上的按钮时,它会给出 NumberFormatException。

我在这两个活动中使用了两个意图。如果我删除了一个通过数组的意图,那么它正在工作,否则它不工作

如何在单个活动中使用多个意图?请帮忙。

播放器.java

public class players extends Activity {

    LinearLayout player_layout;
    Bundle b;

    List<EditText> allEds = new ArrayList<EditText>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.players);

        b = getIntent().getExtras();
        String resStr = b.getString("name");

        player_layout = (LinearLayout) findViewById(R.id.player_layout);

        EditText[] ed1 = new EditText[Integer.parseInt(resStr)+1];
        Button add_player = new Button(players.this);
        add_player.setText("Add Players");

        for(int i=1; i <= Integer.parseInt(resStr); i++)
        {
            ed1[i] = new EditText(players.this);
            allEds.add(ed1[i]);
            player_layout.addView(ed1[i]);
            ed1[i].setId(i);
            ed1[i].setHint("enter player" +i+ "name");
            ed1[i].setHeight(50);
            ed1[i].setWidth(300);
        }

        LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,
                                           LayoutParams.WRAP_CONTENT);
        player_layout.addView(add_player, lp);

        add_player.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(players.this, player_name.class);
                Intent intent1 = new Intent(players.this, player_name.class);
                String[] strings = new String[allEds.size()];

                for(int i=0; i < allEds.size(); i++){
                    strings[i] = allEds.get(i).getText().toString();
                    // intent.putExtra("playerName",b.getString("name"));
                    intent.putExtra("playerName",strings);
                }
                intent1.putExtra("play", b.getString("name"));
                startActivity(intent);
                startActivity(intent1);
            }
        });
    }
}

player_name.java

public class player_name extends Activity {

    LinearLayout player_name;
    Bundle b,b1;

    List<TextView> allEds = new ArrayList<TextView>();
    List<Button> allplus = new ArrayList<Button>();
    List<Button> allminus = new ArrayList<Button>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.player_name);

        b = getIntent().getExtras();
        String resStr = b.getString("name");
        b1 = getIntent().getExtras();
        String[] result = b1.getStringArray("playerName");

        player_name = (LinearLayout) findViewById(R.id.player_name);

        TextView[] ed1 = new TextView[Integer.parseInt(resStr)+1];
        Button[] plus = new Button[Integer.parseInt(resStr)+1];
        Button[] minus = new Button[Integer.parseInt(resStr)+1];

        for(int i=1;i<=Integer.parseInt(resStr);i++)
        {
            ed1[i] = new TextView(player_name.this);
            plus[i] = new Button(player_name.this);
            minus[i] = new Button(player_name.this);

            allEds.add(ed1[i]);
            allplus.add(plus[i]);
            allminus.add(minus[i]);

            player_name.addView(ed1[i]);
            player_name.addView(plus[i]);
            player_name.addView(minus[i]);

            ed1[i].setId(i);
            ed1[i].setHeight(50);
            ed1[i].setWidth(300);
            ed1[i].setText(result[i]);
            ed1[i].setTextColor(Color.CYAN);

            plus[i].setId(i);
            plus[i].setHeight(50);
            plus[i].setWidth(300);
            plus[i].setText("+");
            plus[i].setTextColor(Color.BLACK);

            minus[i].setId(i);
            minus[i].setHeight(50);
            minus[i].setWidth(300);
            minus[i].setText("-");
            minus[i].setTextColor(Color.BLACK);
        }
    }
}

日志猫:-

06-18 04:03:25.657: D/dalvikvm(300): GC_EXTERNAL_ALLOC freed 767 objects / 55840 bytes in 87ms
06-18 04:03:29.057: E/global(300): Deprecated Thread methods are not supported.
06-18 04:03:29.057: E/global(300): java.lang.UnsupportedOperationException
06-18 04:03:29.057: E/global(300):  at java.lang.VMThread.stop(VMThread.java:85)
06-18 04:03:29.057: E/global(300):  at java.lang.Thread.stop(Thread.java:1379)
06-18 04:03:29.057: E/global(300):  at java.lang.Thread.stop(Thread.java:1344)
06-18 04:03:29.057: E/global(300):  at com.example.snooder.splash$1.run(splash.java:35)
06-18 04:03:55.678: D/AndroidRuntime(300): Shutting down VM
06-18 04:03:55.678: W/dalvikvm(300): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-18 04:03:55.717: E/AndroidRuntime(300): FATAL EXCEPTION: main
06-18 04:03:55.717: E/AndroidRuntime(300): java.lang.RuntimeException: Unable to start  activity ComponentInfo{com.example.snooder/com.example.snooder.player_name}: java.lang.NumberFormatException: unable to parse 'null' as integer
06-18 04:03:55.717: E/AndroidRuntime(300):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
06-18 04:03:55.717: E/AndroidRuntime(300):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-18 04:03:55.717: E/AndroidRuntime(300):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-18 04:03:55.717: E/AndroidRuntime(300):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-18 04:03:55.717: E/AndroidRuntime(300):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-18 04:03:55.717: E/AndroidRuntime(300):  at android.os.Looper.loop(Looper.java:123)
06-18 04:03:55.717: E/AndroidRuntime(300):  at android.app.ActivityThread.main(ActivityThread.java:4627)
06-18 04:03:55.717: E/AndroidRuntime(300):  at java.lang.reflect.Method.invokeNative(Native Method)
06-18 04:03:55.717: E/AndroidRuntime(300):  at java.lang.reflect.Method.invoke(Method.java:521)
06-18 04:03:55.717: E/AndroidRuntime(300):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-18 04:03:55.717: E/AndroidRuntime(300):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-18 04:03:55.717: E/AndroidRuntime(300):  at dalvik.system.NativeStart.main(Native Method)
06-18 04:03:55.717: E/AndroidRuntime(300): Caused by: java.lang.NumberFormatException: unable to parse 'null' as integer
06-18 04:03:55.717: E/AndroidRuntime(300):  at java.lang.Integer.parseInt(Integer.java:406)
06-18 04:03:55.717: E/AndroidRuntime(300):  at java.lang.Integer.parseInt(Integer.java:382)
06-18 04:03:55.717: E/AndroidRuntime(300):  at com.example.snooder.player_name.onCreate(player_name.java:41)
06-18 04:03:55.717: E/AndroidRuntime(300):  at   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-18 04:03:55.717: E/AndroidRuntime(300):  at      android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
06-18 04:03:55.717: E/AndroidRuntime(300):  ... 11 more
4

4 回答 4

1

那么错误是你使用的b1是你没有初始化
你的代码

b = getIntent().getExtras();
String[] result = b1.getStringArray("playerName");

它应该是

 b1 = getIntent().getExtras();
String[] result = b1.getStringArray("playerName");
于 2013-06-16T14:43:46.120 回答
0

你的班级名称

public class player_name extends Activity {

你的财产名称:

LinearLayout player_name;

是相同的。这可能会导致空指针异常。此外,根据Java 名称约定,您应该稍后用大写且不带下划线声明类,如下所示:PlayerName

于 2013-06-16T14:39:16.883 回答
0

这里有一个错误:

            String[] strings = new String[allEds.size()];

            for(int i=0; i < allEds.size(); i++){
                strings[i] = allEds.get(i).getText().toString();
                // intent.putExtra("playerName",b.getString("name"));
                intent.putExtra("playerName",strings);
            }

所以strings是一个字符串引用数组,最初都设置为 null。然后在循环中,将数组的第一个元素设置为字符串,然后将整个数组写入意图“playerName”。然后将数组的第二个元素设置为字符串,然后重新写入整个数组。我打赌intent.putExtra()不喜欢其中包含空元素的数组。

你应该这样做:

            String[] strings = new String[allEds.size()];

            for(int i=0; i < allEds.size(); i++){
                strings[i] = allEds.get(i).getText().toString();
                // intent.putExtra("playerName",b.getString("name"));
            }
            intent.putExtra("playerNames",strings);

但是,logcat 并不表示这是问题所在,因此我们将继续。

logcat 输出表明您尝试使用player_name.onCreate()中的空值调用parseInt( ) 。

相关代码似乎是:

    String resStr = b.getString("name");
    EditText[] ed1 = new EditText[Integer.parseInt(resStr)+1];

显然,resStr是一个空值。如果意图中未设置字符串属性“name”,则resStr将为 null,您将获得您所看到的效果。

此外,最佳实践要求您在对parseInt()的调用周围包装一个 try..catch 块,以防万一它传递了任何无法解析为整数的字符串。

顺便说一句,“名称”对于包含整数值的属性名称来说是一个非常糟糕的选择。你确定你不是想要其他名字吗?

另外,您Integer.parseInt(resStr)在代码中一遍又一遍地调用。这是低效的;您应该改为执行以下操作:

    len = Integer.parseInt(resStr);
    TextView[] ed1 = new TextView[len+1];
    Button[] plus = new Button[len+1];
    Button[] minus = new Button[len+1];
    etc....

事实上,你为什么首先将整数值作为字符串传递?您可以(并且应该)在意图中传递整数值。您的代码应如下所示:

    Intent intent = getIntent();
    int len = intent.getIntExtra("name", 1);
于 2013-06-22T00:46:41.283 回答
0
check your intent key you can pass 

intent.putExtra("playerName",strings); 

and 

intent1.putExtra("play",b.getString("name"));


and you can get intent


    b = getIntent().getExtras();
    String resStr = b.getString("name");
    b1 = getIntent().getExtras();
    String[] result = b1.getStringArray("playerName");

used only string in result variable
于 2013-06-18T05:14:22.423 回答