Spinner选择后点击Button程序崩溃问题排查(附完整代码)
Android程序点击按钮崩溃问题分析与修复
你的程序点击按钮后直接退出,核心原因是触发了空指针异常(NullPointerException),咱们拆解问题并修复:
问题1:未初始化数组就直接访问
看你按钮点击事件里这段代码:
int array1[] = null; for (int i = 0; i<numnum; i++){ array1[i]=((int)(Math.random())); // ... }
这里array1被赋值为null,相当于根本没创建数组对象就直接去访问下标i,JVM必然会抛出异常导致程序崩溃。
问题2:文本显示的两个小bug
- 每次循环调用
setText会覆盖之前的内容,最终TextView只会显示最后一个随机数; - 你写的换行符是
/n,这是错误的,Android里换行必须用\n。
修复后的完整按钮点击逻辑
把按钮点击事件的代码改成这样:
button1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // 先判断数值是否合法,避免创建长度为0的数组 if (numnum <= 0) { text1.setText("请选择有效的数值"); return; } int array1[] = new int[numnum]; // 初始化数组,分配对应大小的内存 StringBuilder resultBuilder = new StringBuilder(); // 用StringBuilder拼接文本更高效 for (int i = 0; i < numnum; i++){ // 修正随机数生成:Math.random()返回0-1的double,转int会变成0,这里改成0-99的随机数示例 array1[i] = (int)(Math.random() * 100); resultBuilder.append("num #").append(i+1).append(": ").append(array1[i]).append("\n"); } text1.setText(resultBuilder.toString()); // 一次性把所有内容设置到TextView } });
额外补充说明
- 原来的
Math.random()直接转int会一直得到0,因为它返回的是[0.0,1.0)区间的数值,转int会截断小数部分,我改成了Math.random() * 100生成0-99的随机数,你可以根据需求调整范围; - 新增了
numnum <=0的判断,防止Spinner未选中有效数值时出现异常。
内容的提问来源于stack exchange,提问作者dayday
相关产品推荐
相关产品推荐

