2016-02-27 124 views
0

我试图在android studio(java)中创建一个应用程序,但是我的复选框有点问题。每次当我取消选中复选框时,我的应用程序将崩溃。它的目的是当复选框被选中时,整数存储在一个数组列表中,一个随机数发生器从数组中选择一个整数并显示它。有人可以告诉我我做错了什么。为什么我的应用程序崩溃(复选框)

java文件

package com.developer.sven.dartworkout20; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.CheckBox; 

import java.util.ArrayList; 

public class PreferenceDartThrow extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.preference_dart_throw_page); 

    Intent preferenceDartThrowPageOpened = getIntent(); 
    String previousActivity = preferenceDartThrowPageOpened.getExtras().getString("Pref"); 
} 

ArrayList<Integer> selection = new ArrayList<Integer>(); 

public void selectNumber(View view) { 
    boolean numberChecked = ((CheckBox) view).isChecked(); 
    switch (view.getId()) { 
     case R.id.number_D1: 
      if (numberChecked) { 
       selection.add(1); 
      } else { 
       selection.remove(1); 
      } 
      break; 

     case R.id.number_D2: 
      if (numberChecked) { 
       selection.add(2); 
      } else { 
       selection.remove(2); 
      } 
      break; 

     case R.id.number_D3: 
      if (numberChecked) { 
       selection.add(3); 
      } else { 
       selection.remove(3); 
      } 
      break; 

     case R.id.number_D4: 
      if (numberChecked) { 
       selection.add(4); 
      } else { 
       selection.remove(4); 
      } 
      break; 

     case R.id.number_D5: 
      if (numberChecked) { 
       selection.add(5); 
      } else { 
       selection.remove(5); 
      } 
      break; 
    } 
} 
} 

.XML文件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="21dp" 
     android:id="@+id/number_D1" 
     android:onClick="selectNumber" 
     android:layout_below="@+id/text_double" 
     android:layout_centerHorizontal="true" 
     android:checked="false" /> 


    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="21dp" 
     android:id="@+id/number_D2" 
     android:onClick="selectNumber" 
     android:layout_below="@+id/number_D1" 
     android:layout_centerHorizontal="true" 
     android:checked="false" 
     android:visibility="visible" /> 


    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="21dp" 
     android:id="@+id/number_D3" 
     android:onClick="selectNumber" 
     android:layout_below="@+id/number_D2" 
     android:checked="false" 
     android:layout_centerHorizontal="true" 
     android:visibility="visible" /> 

    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="21dp" 
     android:id="@+id/number_D4" 
     android:onClick="selectNumber" 
     android:layout_below="@+id/number_D3" 
     android:checked="false" 
     android:layout_centerHorizontal="true" 
     android:visibility="visible" /> 

    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="21dp" 
     android:onClick="selectNumber" 
     android:layout_below="@+id/number_D4" 
     android:checked="false" 
     android:layout_centerHorizontal="true" 
     android:id="@+id/number_D5" 
     android:visibility="visible" /> 
</RelativeLayout> 

错误日志

02-27 14:15:33.540 1024-1024/com.developer.sven.dartworkout20 E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: com.developer.sven.dartworkout20, PID: 1024 
                        java.lang.IllegalStateException: Could not execute method for android:onClick 
                         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:275) 
                         at android.view.View.performClick(View.java:4438) 
                         at android.widget.CompoundButton.performClick(CompoundButton.java:100) 
                         at android.view.View$PerformClick.run(View.java:18422) 
                         at android.os.Handler.handleCallback(Handler.java:733) 
                         at android.os.Handler.dispatchMessage(Handler.java:95) 
                         at android.os.Looper.loop(Looper.java:136) 
                         at android.app.ActivityThread.main(ActivityThread.java:5017) 
                         at java.lang.reflect.Method.invokeNative(Native Method) 
                         at java.lang.reflect.Method.invoke(Method.java:515) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                         at dalvik.system.NativeStart.main(Native Method) 
                        Caused by: java.lang.reflect.InvocationTargetException 
                         at java.lang.reflect.Method.invokeNative(Native Method) 
                         at java.lang.reflect.Method.invoke(Method.java:515) 
                         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270) 
                         at android.view.View.performClick(View.java:4438)  
                         at android.widget.CompoundButton.performClick(CompoundButton.java:100)  
                         at android.view.View$PerformClick.run(View.java:18422)  
                         at android.os.Handler.handleCallback(Handler.java:733)  
                         at android.os.Handler.dispatchMessage(Handler.java:95)  
                         at android.os.Looper.loop(Looper.java:136)  
                         at android.app.ActivityThread.main(ActivityThread.java:5017)  
                         at java.lang.reflect.Method.invokeNative(Native Method)  
                         at java.lang.reflect.Method.invoke(Method.java:515)  
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)  
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)  
                         at dalvik.system.NativeStart.main(Native Method)  
                        Caused by: java.lang.IndexOutOfBoundsException: Invalid index 2, size is 1 
                         at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
                         at java.util.ArrayList.remove(ArrayList.java:403) 
                         at com.developer.sven.dartworkout20.PreferenceDartThrow.selectNumber(PreferenceDartThrow.java:38) 
                         at java.lang.reflect.Method.invokeNative(Native Method)  
                         at java.lang.reflect.Method.invoke(Method.java:515)  
                         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)  
                         at android.view.View.performClick(View.java:4438)  
                         at android.widget.CompoundButton.performClick(CompoundButton.java:100)  
                         at android.view.View$PerformClick.run(View.java:18422)  
                         at android.os.Handler.handleCallback(Handler.java:733)  
                         at android.os.Handler.dispatchMessage(Handler.java:95)  
                         at android.os.Looper.loop(Looper.java:136)  
                         at android.app.ActivityThread.main(ActivityThread.java:5017)  
                         at java.lang.reflect.Method.invokeNative(Native Method)  
                         at java.lang.reflect.Method.invoke(Method.java:515)  
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)  
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)  
                         at dalvik.system.NativeStart.main(Native Method)  
+0

请定义和展开“崩溃”。该应用做什么?爆炸?说你的妈妈对你犯了什么事? –

+0

看来你已经遗漏了两个文件的一部分(它们都不能正确编译,因为它们似乎错过了它们的结尾)。另外,发布错误日志可以让我们追踪您的问题。 – Michael

+0

你好迈克尔。它是真实的,我把代码的一部分留给了我。这是因为它基本相同。我编辑这部分结束添加错误日志。希望你有足够的信息来帮助我 – SvenH

回答

0

你应该仔细观察在异常java.lang.IndexOutOfBoundsException: Invalid index 2, size is 1

这意味着你尝试在最大指数是1

的ArrayList指数开始01您的ID才能使用索引2,所以你需要通过ID-1去掉,代码

public void selectNumber(View view) { 
    boolean numberChecked = ((CheckBox) view).isChecked(); 
    switch (view.getId()) { 
     case R.id.number_D1: 
      if (numberChecked) { 
       selection.add(1); 
      } else { 
       selection.remove(0); 
      } 
      break; 

     case R.id.number_D2: 
      if (numberChecked) { 
       selection.add(2); 
      } else { 
       selection.remove(1); 
      } 
      break; 

     case R.id.number_D3: 
      if (numberChecked) { 
       selection.add(3); 
      } else { 
       selection.remove(2); 
      } 
      break; 

     case R.id.number_D4: 
      if (numberChecked) { 
       selection.add(4); 
      } else { 
       selection.remove(3); 
      } 
      break; 

     case R.id.number_D5: 
      if (numberChecked) { 
       selection.add(5); 
      } else { 
       selection.remove(4); 
      } 
      break; 
    } 
} 
} 
相关问题