单击按钮x次后应用程序崩溃

时间:2014-08-08 16:58:42

标签: java android state lang

大家好我有问题。当我运行我的应用程序时,按下x次按钮后,一次活动崩溃。有时它有效,有时不行。请帮忙。不知道该怎么做。强文

08-08 09:19:57.087: E/AndroidRuntime(2772): FATAL EXCEPTION: main
08-08 09:19:57.087: E/AndroidRuntime(2772): Process: org.nolodigas, PID: 2772
08-08 09:19:57.087: E/AndroidRuntime(2772): java.lang.IllegalStateException: Could not execute method of the activity
08-08 09:19:57.087: E/AndroidRuntime(2772):     at android.view.View$1.onClick(View.java:3823)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at android.view.View.performClick(View.java:4438)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at android.view.View$PerformClick.run(View.java:18422)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at android.os.Handler.handleCallback(Handler.java:733)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at android.os.Handler.dispatchMessage(Handler.java:95)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at android.os.Looper.loop(Looper.java:136)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at android.app.ActivityThread.main(ActivityThread.java:5017)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at java.lang.reflect.Method.invokeNative(Native Method)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at java.lang.reflect.Method.invoke(Method.java:515)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at dalvik.system.NativeStart.main(Native Method)
08-08 09:19:57.087: E/AndroidRuntime(2772): Caused by: java.lang.reflect.InvocationTargetException
08-08 09:19:57.087: E/AndroidRuntime(2772):     at java.lang.reflect.Method.invokeNative(Native Method)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at java.lang.reflect.Method.invoke(Method.java:515)
08-08 09:19:57.087: E/AndroidRuntime(2772):     at android.view.View$1.onClick(View.java:3818)
08-08 09:19:57.087: E/AndroidRuntime(2772):     ... 11 more
08-08 09:19:57.087: E/AndroidRuntime(2772): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=121; index=123
08-08 09:19:57.087: E/AndroidRuntime(2772):     at org.nolodigas.Jugar.okButton(Jugar.java:104)
08-08 09:19:57.087: E/AndroidRuntime(2772):     ... 14 more

有我的logcat。我无法找到错误。这是我的java代码

 public class Jugar extends Activity implements ViewSwitcher.ViewFactory,
 View.OnClickListener {

        private TextSwitcher mSwitcher;
        TextView textViewTime;
        ImageView img;
        int cont=0;
        private int mCounter = 0;
        private int[] a = {
                R.drawable.casa,R.drawable.cantar,R.drawable.agua,R.drawable.anciana,R.drawable.arbol,R.drawable.mochila,R.drawable.auto,R.drawable.azucar,R.drawable.libro,R.drawable.empresa,R.drawable.control,R.drawable.computadora,R.drawable.boca,
                R.drawable.boliche,R.drawable.campo,R.drawable.cantar,R.drawable.cargador,R.drawable.casa,R.drawable.casamiento,R.drawable.cerveza,R.drawable.cocina,R.drawable.concierto,R.drawable.control,R.drawable.cuaderno,R.drawable.cuerpo,R.drawable.deporte,R.drawable.dj,
                R.drawable.doctor,R.drawable.droga,R.drawable.edificio,R.drawable.empresa,R.drawable.escritor,R.drawable.famoso,R.drawable.ganso,R.drawable.gato,R.drawable.gente,R.drawable.ginobili,R.drawable.grande,R.drawable.hospital,R.drawable.hotel,
                R.drawable.huerfano,R.drawable.ingeniero,R.drawable.jugo,R.drawable.libreria,R.drawable.libro,R.drawable.mesa,R.drawable.mochila,R.drawable.museo,R.drawable.musica,R.drawable.naranja,R.drawable.nieve,R.drawable.ovni,R.drawable.paris,
                R.drawable.pasto,R.drawable.pelo,R.drawable.pelota,R.drawable.pendrive,R.drawable.periodista,R.drawable.perro,R.drawable.piramide,R.drawable.pistola,R.drawable.planeta,R.drawable.playa,R.drawable.sirena,R.drawable.abogado,R.drawable.esqui,R.drawable.funda,R.drawable.disco,
                R.drawable.pornografia,R.drawable.profesor,R.drawable.puerta,R.drawable.radio,R.drawable.rio,R.drawable.roma,R.drawable.ropa,R.drawable.sillon,R.drawable.superheroe,R.drawable.taza,R.drawable.luz,R.drawable.lapiz,R.drawable.ron,R.drawable.fernet,R.drawable.bariloche,R.drawable.garage,R.drawable.alarma,
                R.drawable.tela,R.drawable.televisor,R.drawable.unia,R.drawable.ventana,R.drawable.ventilador,R.drawable.viajar,R.drawable.zapatillas,R.drawable.pelea,R.drawable.panda,R.drawable.cable,R.drawable.tinelli,R.drawable.manzana,R.drawable.ftutilla,R.drawable.leche,R.drawable.fotocopia,
                R.drawable.mono,R.drawable.piano,R.drawable.guitarra,R.drawable.bateria,R.drawable.camara,R.drawable.bombon,R.drawable.tren,R.drawable.pintura,R.drawable.aldea,R.drawable.grito,R.drawable.bandera,R.drawable.messi,R.drawable.aguero,R.drawable.legrand,R.drawable.zuckerberg,R.drawable.billetera,R.drawable.guepardo,R.drawable.elefante,R.drawable.calle,R.drawable.gimnasio,R.drawable.argentina,



                };
@Override
public void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.jugar);

     mSwitcher = (TextSwitcher) findViewById(R.id.switcher);
        mSwitcher.setFactory(this);
        textViewTime = (TextView) findViewById(R.id.texto1);

        textViewTime.setText("01:00");

        Button nextButton = (Button) findViewById(R.id.next);
        nextButton.setOnClickListener(this);

        updateCounter();
    }

    private void updateCounter() {
        mSwitcher.setText(String.valueOf(mCounter));
    }

    public View makeView() {
        TextView t = new TextView(this);
        t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
        t.setTextSize(36);
        return t;
    }

protected void setOrientation() {

    int current = getRequestedOrientation();
    // only switch the orientation if not in portrait
    if ( current != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ) {
        setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    }
public void lanzarJugar(View v) {
}
@Override
public void onClick(View v) {
    mCounter=0;
    mSwitcher.setText(String.valueOf(mCounter));
     final CounterClass timer = new CounterClass(60000, 1000);
    timer.start();
    ImageView img= (ImageView) findViewById(R.id.imageView1);
    int rando = (int) (Math.random() * 125);
    Drawable d = getResources().getDrawable(a[rando]);
    img.setImageDrawable(d);
}

public void noButton(View v){
    ImageView img= (ImageView) findViewById(R.id.imageView1);
    int rando = (int) (Math.random() * 125);
    Drawable d = getResources().getDrawable(a[rando]);
    img.setImageDrawable(d);
}
public void okButton(View v) {

    ImageView img= (ImageView) findViewById(R.id.imageView1);
    int rando = (int) (Math.random() * 125);
    Drawable d = getResources().getDrawable(a[rando]);
    img.setImageDrawable(d);
    mCounter++;
     updateCounter();
     cont++;



}
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@SuppressLint({ "NewApi", "DefaultLocale" })
public class CounterClass extends CountDownTimer {

    public CounterClass(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        // TODO Auto-generated constructor stub
    }

    @SuppressLint("NewApi")
    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    @Override
    public void onTick(long millisUntilFinished) {
        // TODO Auto-generated method stub

        long millis = millisUntilFinished;
        String ms = String.format("%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),

                TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
        System.out.println(ms);
        textViewTime.setText(ms);
    }

    @Override
    public void onFinish() {
        // TODO Auto-generated method stub
        textViewTime.setText("Tiempo!");
    }
}

}

3 个答案:

答案 0 :(得分:0)

在下面的代码行中,您将生成一个随机数并选择一个资源整数。但是您尝试从阵列获取的索引不存在。所以你得到了IndexOutOfBounds异常。

int rando = (int) (Math.random() * 125);
Drawable d = getResources().getDrawable(a[rando]);

答案 1 :(得分:0)

错误在于okButton方法:

int rando = (int) (Math.random() * 125);
Drawable d = getResources().getDrawable(a[rando]);

rando返回数组的值。

答案 2 :(得分:0)

您的数组仅包含121个元素。因此,每当生成的随机数在0-120范围内时,app就能正常运行。但只要数字介于121-124之间,它就会因IndexOutOfBounds异常而崩溃。向数组中添加更多项目或使用以下代码:

int rando = (int) (Math.random() * 121);
Drawable d = getResources().getDrawable(a[rando]);
相关问题