2011-11-15 3 views
-3

Я сделал простую игру для викторины Android для Android 2.2 (sdk-8). Все работает отлично на моем эмуляторе, но когда я пытаюсь использовать приложение на своем смартфоне (Android 2.2), он падает на 9-й вопрос.Weirdest android app crash

  • 1-8 вопросов отлично работает на моем смартфоне (Android 2.2)

  • после 8-го (9) он выходит из строя (смартфон)

  • Все прекрасно работает в моем эмуляторе, не падает (Eclipse)

  • Я нахожусь% 120 уверен, что Im используя .apk Я экспортировал из моего андроида проекта в затмении

Любая идея, что не так?

public class ETBetaActivity extends Activity implements View.OnClickListener { 

    Button answer_1, 
    answer_2,answer_3, 
    answer_4,main; 

    TextView q_textview, 
    tip; 

    private String a1,a2,a3,a4 = ""; 

    private int i1 = 0; 
    public static int correct = 0; 

    private boolean alive = true; 

    MediaPlayer button_click; 

    private String[] questions = 
    {"Q1", 
    "Q2", 
    "Q3", 
    "Q4", 
    "Q5", //5 
    "Q6", 
    "Q7", 
    "Q8", 
    "Q9", //CRASH!!!! WHAT THE FUDGE?! 
    "Q10" //10 
    }; 
    public static int question_amount = 10; 
    private String[] answers_correct = 
    {"Correct answer - 1", 
    "Correct answer - 2", 
    "Correct answer - 3", 
    "Correct answer - 4", 
    "Correct answer - 5", 
    "Correct answer - 6", 
    "Correct answer - 7", 
    "Correct answer - 8", 
    "Correct answer - 9", 
    "Correct answer - 10" 
    }; 

    private String[][] answers_wrong = 
    { {"Q1-1", "Q1-2" , "Q1-3"}, 
     {"Q2-1", "Q2-2" , "Q2-3"}, 
     {"Q3-1", "Q3-2" , "Q3-3"}, 
     {"Q4-1", "Q4-2" , "Q4-3"}, 
     {"Q5-1", "Q5-2" , "Q5-3"}, 
     {"Q6-1", "Q6-2" , "Q6-3"}, 
     {"Q7-1", "Q7-2" , "Q7-3"}, 
     {"Q8-1", "Q8-2" , "Q8-3"}, 
     {"Q9-1", "Q9-2" , "Q9-3"}, 
     {"Q10-1", "Q10-2" , "Q10-3"} 

    }; 


    List<String> question_list = new ArrayList<String>(); 
    List<String> answer_list_correct = new ArrayList<String>(); 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     getData(); 
     Game(i1); 
    } 


    @Override 
    public void onClick(View view) { 
     if (alive == false) { 
     // startActivity(new Intent("com.aleksei.etb.END")); 
      return; 
     } 
     button_click = MediaPlayer.create(this, R.raw.button_click); 
     button_click.start(); 
     switch(view.getId()){ 
     case R.id.button5: //main 
      break; 
     case R.id.button1: //answer_1 
      if(isCorrect(1)) 
       correct++; 


      break; 
     case R.id.button2: //answer_2 
      if(isCorrect(2)) 
       correct++; 

      break; 
     case R.id.button3: //answer_3 
      if(isCorrect(3)) 
       correct++; 

      break; 
     case R.id.button4: //answer_3 
      if(isCorrect(4)) 
       correct++; 


      break; 

     default: 
      break; 


     } 
     Game(i1); 
     //correct++; 
     tip.setText(""); 
    } 


    public static int getResults(){ 
     int value = (int) Math.floor((correct*5)/question_amount); 
     if(value <= 0) 
     return 1; 
     else 
     return value; 
    } 

    private boolean isCorrect(int button){ 
     for (int i = 0; i < answers_correct.length; i++){ 
     if(button == 1 && a1 == answers_correct[i] 
      || button == 2 && a2 == answers_correct[i] 
      || button == 3 && a3 == answers_correct[i] 
      || button == 4 && a4 == answers_correct[i]) 
      return true; 
     } 
     return false; 
    } 

    private void Game(int q){ 
     if(i1 == question_amount) { //no more questions 
      startActivity(new Intent("com.aleksei.etb.END")); 
      alive = false; 
      return; 
     } 
     try { 
     main.setText("Dunno"); 
    /* String answer_list[][] = { 
       {answers_correct[i1], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]}, 
       {answers_correct[i1], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]}, 
       {answers_correct[i1], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]}, 
       {answers_correct[i1], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]}, 
       {answers_correct[i1], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]}, 
       {answers_correct[i1], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]}, 
       {answers_correct[i1], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]}, 
       {answers_correct[i1], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]}, 
       {answers_correct[i1], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]}, 
       {answers_correct[i1], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]} 
     }; */ 
     String answer_list[] = { 
     answers_correct[q], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]  
     }; 

     Collections.shuffle(Arrays.asList(answer_list)); 
     answer_1.setText(answer_list[0]); 
     answer_2.setText(answer_list[1]); 
     answer_3.setText(answer_list[2]); 
     answer_4.setText(answer_list[3]); 
     a1 = answer_list[0]; 
     a2 = answer_list[1]; 
     a3 = answer_list[2]; 
     a4 = answer_list[3]; 
     q_textview.setText(questions[q]); 
     /*questions = question_list.toArray(new String[question_list.size()]); 
     answers_correct = answer_list_correct.toArray(new String[answer_list_correct.size()]); 
     question.setText(questions[i1]);   

     answer_list_correct.remove(questions[i1]); 
     question_list.remove(questions[i1]);*/ 
     } catch (Exception ex){} 
     i1++; 
    } 
    private void getData(){ 
     //Getting the data 
     main = (Button) findViewById(R.id.button5); 
     answer_1 = (Button) findViewById(R.id.button1); 
     answer_2 = (Button) findViewById(R.id.button2); 
     answer_3 = (Button) findViewById(R.id.button3); 
     answer_4 = (Button) findViewById(R.id.button4); 
     q_textview = (TextView) findViewById(R.id.question); 
     tip = (TextView) findViewById(R.id.answ1); 

     //Making the buttons, actually work 
     main.setOnClickListener(this); 
     answer_1.setOnClickListener(this); 
     answer_2.setOnClickListener(this); 
     answer_3.setOnClickListener(this); 
     answer_4.setOnClickListener(this); 

     //Resets the text 
     //Note to self: Replace with another ContectView 
     main.setText("Begin!"); 
     answer_4.setText(""); 
     answer_3.setText(""); 
     answer_2.setText(""); 
     answer_1.setText(""); 
     tip.setText(""); 

    /* for(String x : questions) { 
      for(String y : answers_correct){ 

      answer_list_correct.add(y); 
      question_list.add(x); 

      Collections.shuffle(answer_list_correct); 
      Collections.shuffle(question_list); 

      } 
     } */ 



    } 


    } 

Конец намерения/класс

public class End extends Activity implements RatingBar.OnRatingBarChangeListener { 
    // ETBetaActivity classy = new ETBetaActivity(); 

    TextView score; 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.end); 
     score = (TextView) findViewById(R.id.score); 
     results(); 
     final RatingBar yourRating = (RatingBar) findViewById(R.id.ratingBar1); 
     yourRating.setRating(ETBetaActivity.getResults()); 
     Toast.makeText(End.this, "Score "+ETBetaActivity.getResults(), Toast.LENGTH_LONG).show(); 

     yourRating.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener(){ 

      @Override 
      public void onRatingChanged(RatingBar ratingBar, float rating, 
       boolean fromUser) { 
       // yourRating.setRating(rating); 
       yourRating.setRating(ETBetaActivity.getResults()); 
       Toast.makeText(End.this, "Score "+ETBetaActivity.getResults(), Toast.LENGTH_LONG).show(); 
      }}); 
    //movieImage.setImageResource(R.drawable.icon);  
    } 




    @Override 
    public void onRatingChanged(RatingBar ratingBar, float rating, 
      boolean fromUser) { 
     // TODO Auto-generated method stub 

    } 

    public void results(){ 
     score.setText("Your score "+ETBetaActivity.getResults()); 
    } 

    } 

PS. Это не класс «END» вызывает ошибку, потому что я пытался

if(i1 == 4) 

Назвать это раньше, и она работала отлично.

С уважением.

+6

Это бесполезно без логарифмической кошки. Опубликуйте журнал телефона. – davidcesarino

+0

Как я это делаю? Все, что я получаю, это сообщение об ошибке, указывающее, что процесс com.aleksti.etc был остановлен. – Alex

+1

Краткое руководство: 1) Подключите телефон через USB к компьютеру. 2) Убедитесь, что USB-отладка включена * («Настройки -> Приложения -> Разработка» на телефоне) * 3) Покажите логарифм в eclipse через окно -> Показать вид -> Другое -> LogCat'. Вы должны увидеть окно рабочей области, где все виды сообщений журнала печатаются разными цветами. 4) Сбой вашего приложения. 5) Найдите большую красную часть * (должно выглядеть как [this] (http://fullroom.com/_blog/LogCatStep3 .png)) * с тегом 'AndroidRuntime'. 6) Сообщение, что здесь 7) Прибыль! –

ответ

0

Вы уверены, что работает над своим эмулятором? Я пробовал его на устройстве 2.3.3, и он сбрасывается после 10-го вопроса при попытке запустить startActivity(new Intent("com.aleksei.etb.END")). Я изменил его на startActivity(new Intent(this, End.class)), и он отлично работает.

Btw, мне пришлось удалить строки с MediaPlayer инициализации, как я не музыкальный файл

+0

Нет, отлично работает с Android 2.2 startActivity (новый Intent («com.aleksei.etb.END»)). Попытался и сам. (Я только что назвал это раньше на своем телефоне, и он отлично работал) – Alex

+1

Чтобы вызвать класс End с помощью «com.aleksei.etb.END», вы должны объявить его в AndroidManifest. <активность андроид: имя = "Конец" андроид: метка = "@ строка/app_name"> <намеренного фильтр> <действие андроид: имя = "com.aleksei.etb.END" /> < категория android: name = "android.intent.category.DEFAULT" /> Alex

+0

@John Спасибо, я не знал этого, он отлично работает сейчас. Это оставляет три возможности, которые я предполагаю - либо некоторые проблемы с 2.2 Android, что-то с MediaPlayer или поврежденным экспортированным apk. Я бы включил режим отладки на телефоне, подключив его и посмотрев, что отображается в LogCat, или просто отлаживается с использованием контрольных точек – Koger

0

Я думаю, что это проблема с MediaPlayer. Он фактически не не выпускался и Propably вызывает некоторые проблемы с памятью. Я также не вижу причины создавать его каждый раз, когда его нужно использовать.

Что касается других вещей, то IMO, использующая некоторые статические поля для обмена значениями между Activity, не очень хорошо. Прочитайте о намерениях, дополнениях и пропущенных значениях для Activity. Я думаю, вы найдете несколько примеров на SO.

+0

Да, только что проверил LogCat, это был MediaPlayer. – Alex

+0

Извините, но вы можете показать мне трассировку стека исключений? – androdevo

+0

А, слишком поздно, Алеади исправил, но это был нуль. – Alex