2013-07-10 2 views
-2

У меня есть Logcat error report, что я не могу понять. Не могли бы вы помочь мне? Я новичок в разработке приложений для Android!LOGCAT понимание в ECLIPSE IDE

07-10 08:51:42.603: E/AndroidRuntime(791): FATAL EXCEPTION: main 

07-10 08:51:42.603: E/AndroidRuntime(791): java.lang.ArrayIndexOutOfBoundsException: length=26; index=26 

07-10 08:51:42.603: E/AndroidRuntime(791): at com.example.hangman.Play$1.onClick(Play.java:70) 

07-10 08:51:42.603: E/AndroidRuntime(791): at android.view.View.performClick(View.java:4204) 

07-10 08:51:42.603: E/AndroidRuntime(791): at android.view.View$PerformClick.run(View.java:17355) 

07-10 08:51:42.603: E/AndroidRuntime(791): at android.os.Handler.handleCallback(Handler.java:725) 

07-10 08:51:42.603: E/AndroidRuntime(791): at android.os.Handler.dispatchMessage(Handler.java:92) 

07-10 08:51:42.603: E/AndroidRuntime(791): at android.os.Looper.loop(Looper.java:137) 

07-10 08:51:42.603: E/AndroidRuntime(791): at android.app.ActivityThread.main(ActivityThread.java:5041) 

07-10 08:51:42.603: E/AndroidRuntime(791): at java.lang.reflect.Method.invokeNative(Native Method) 

07-10 08:51:42.603: E/AndroidRuntime(791): at java.lang.reflect.Method.invoke(Method.java:511) 

07-10 08:51:42.603: E/AndroidRuntime(791): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 

07-10 08:51:42.603: E/AndroidRuntime(791): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 

07-10 08:51:42.603: E/AndroidRuntime(791): at dalvik.system.NativeStart.main(Native Method) 

И мой код OnClickListener() ниже: View.OnClickListener go_func = новый View.OnClickListener() {

@Override 
    public void onClick(View v) { 
     int flag = 0; 
     TextView status = (TextView) findViewById(R.id.status); 
     TextView chances = (TextView) findViewById(R.id.chances); 
     TextView word = (TextView) findViewById (R.id.word); 
     EditText guessed = (EditText) findViewById(R.id.letter_guessed); 
     String letter = guessed.getText().toString(); 
     char[] Letter = letter.toCharArray(); 
     String current_status = status.getText().toString(); 
     String current_chances = chances.getText().toString(); 
     String current_word = new String(); 

     //checking if letter is already guessed 
     for(int i=0;i<letters_guessed.length;i++) 
     { 
      if(Letter[0] == letters_guessed[i]) 
      { 
       current_status = "Letter Already Guessed!"; 
       status.setText(current_status); 
      } 
      break; 
     } 

     //if letter is not already guessed 
     if(current_status !="Letter Already Guessed!") 
     { 
      int len=0; 
      int i=0; 
      while(letters_guessed[i] != '\u0000') 
      { 
       len++; 
       i++; 
      } 
      if(len !=0) 
       letters_guessed[len] = Letter[0]; 
      else 
       letters_guessed[0] = Letter[0]; 

      for(i=0;i<word_chosen.length();i++) 
      { 
       flag = 0; 
       for(int j=0;j<letters_guessed.length;j++) 
       { 

        if(word_final[i]==letters_guessed[j]) 
        { 
         char[] temp_array = current_word.toCharArray(); 
         temp_array[temp_array.length] = word_final[i]; 
         current_word = temp_array.toString(); 
         flag=1; 
         break; 
        } 

       } 
       if(flag==0) 
       { 
        char[] temp_array = current_word.toCharArray(); 
        temp_array[temp_array.length] = '_'; 
        current_word = temp_array.toString(); 
       } 

      } 
     } 
     int a=0; 
     char[] word_check = word_chosen.toCharArray(); 
     for(int i=0;i<word_check.length;i++) 
     { 
      if(word_check[i] == Letter[0]) 
      { 
       a=1; 
       status.setText("Correct guess!"); 
      } 
     } 
     if(a==0) 
     { 
      status.setText("Wrong guess!"); 
     } 
     word.setText(current_word); 

    } 
}; 
+0

серьезно ужасный предмет, я должен сказать – Siddharth

ответ

1

LogCat показывает в какой момент в различных классах вашей заявки были выполнение когда произошел сбой:

Верхняя строка показывает, что у вас есть FATAL Exception из-за следующей строки ArrayIndexOutOfBoundsException (Вы пытаетесь г для доступа пункта 26 в массиве, размер которого составляет 26, а нумерация от 0-25)

Далее, это исключение было вызвано, когда приложение было выполнение строки 70 в onClick() методы внутри com.example.hangman.Play Activity:

at com.example.hangman.Play$1.onClick(Play.java:70) 

Оставшиеся строки - это остальные классы, которые запускаются системой Android (и выполнялись, когда произошел сбой) для выполнения onClick() внутри.

Так, чтобы подвести итог, вы имеете ArrayIndexOutOfBoundsException на line 70 в методе onClick() в Play деятельности

+0

, но в моем коде i не обращайтесь к индексу 26! –

+0

Невозможно увидеть номера строк здесь, но я предполагаю, что letter_guessed пуст. –

+0

Первоначально он пуст. Я заполняю его, когда приложение продолжается. Любая проблема, связанная с этим? –

0

ArrayIndexOutOfBoundsException говорит, что вы используете неправильный индекс при доступе массива. Вашего размера массив 26 и индекс должен быть от 0 до 25.

изменений этого

while(letters_guessed[i] != '\u0000') 
     { 
      len++; 
      i++; 
     } 

в

while(i < letters_guessed.length - 1 && letters_guessed[i] != '\u0000') 
     { 
      len++; 
      i++; 
     } 
+0

Это единственное, что я мог понять! Но в моей программе код проходит только через правильное индексирование! –

+0

просьба предоставить исходный код для метода OnClick в Play.java –

+0

Вам нужно добавить проверку на макс я в то время как цикл: в то время как (! Я

0

Чтобы помочь вам решить ваши собственные проблемы в будущем (не только этот один), это полезно, чтобы понять, как целенаправленно используйте Android Logger. Существует хороший ресурс here, чтобы узнать, как это делается с различными типами информации, которую вы хотите зарегистрировать.

Что бы я сделал, если вы не можете легко найти проблему с первого взгляда, - это использовать Logger целенаправленно, чтобы узнать, где вы можете получить неожиданные результаты. Например:

//checking if letter is already guessed 
Log.d("Play", "letters_guessed.length = " + letters_guessed.length); 
for(int i=0;i<letters_guessed.length;i++) 
{ 
    Log.d("Play", "i = " + i); 
    Log.d("Play", "Letter[0] = " + Letter[0]); 
    if(Letter[0] == letters_guessed[i]) 
    { 
     current_status = "Letter Already Guessed!"; 
     status.setText(current_status); 
    } 
    break; 
} 
+0

на самом деле что делает журнал? Что означает журнал (что-то)? –

+0

Если вы работаете с Eclipse, вы можете просматривать записи журнала в режиме реального времени с помощью вида LogCat. «Окно -> Показать вид -> Другое ... -> Android -> LogCat". «D» в Log.d просто означает «debug». Также есть «i» для «info», «e» для «error» и т. Д. Ссылка, которую я предоставил, предоставит вам дополнительную информацию об этом. –

Смежные вопросы