2011-11-15 3 views
-3

나는 안드로이드 2.2 (sdk - 8)에 대한 간단한 안드로이드 퀴즈 게임을 만들었습니다. 모든 것이 내 에뮬레이터에서 완벽하게 작동하지만 스마트 폰 (Android 2.2)에서 앱을 사용해 볼 때 9 번째 질문에서 충돌이 발생합니다.이상한 안드로이드 애플 리케이션 크래시

  • 1-8 질문, 그것은 (스마트 폰)

  • 모든 것이 내 에뮬레이터에서 완벽하게 작동 충돌 (9 일) 8 일 후 내 스마트 폰 (안드로이드 2.2)

  • 에 완벽하게 작동 어떤 충돌 (이클립스)

  • 나는 120 % 확실 임 내가 이클립스 내 안드로이드 프로젝트에서 내 보낸 된 .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. 내가 일찍 전화를 걸려면

if(i1 == 4) 

을 시도했습니다, 그리고 그것을 완벽하게 작동 원인 그것은, 오류의 원인이 'END'클래스 아니다.

감사합니다.

+6

로그 고양이 없이는 쓸모가 없습니다. 전화 기록을 게시하십시오. – davidcesarino

+0

내가 어떻게합니까? com.aleksti.etc 프로세스가 중지되었다는 오류 메시지가 표시됩니다. – Alex

+1

짧은 안내 : 1) USB를 통해 전화를 컴퓨터에 연결하십시오. 2) USB 디버깅이 활성화되어 있는지 확인하십시오. * (전화의 '설정 -> 응용 프로그램 -> 개발') * 3) Window에서 ->보기 표시 -> 기타 -> LogCat'. 모든 종류의 로그 메시지가 다른 색상으로 인쇄되는 작업 영역 창이 나타납니다. 4) 응용 프로그램이 충돌합니다. 5) 큰 빨간 부분을 찾습니다. * ([this] (http://fullroom.com/_blog/LogCatStep3 .png)) * 태그가 AndroidRuntime 인. 6) 게시물 여기에 7) 이익! –

답변

0

에뮬레이터에서 제대로 작동합니까? 2.3.3 장치에서 실행 해 보았습니다. 실행하려고 할 때 열 번째 질문 이후에 충돌합니다. startActivity(new Intent("com.aleksei.etb.END")). startActivity(new Intent(this, End.class))으로 변경했는데 정상적으로 작동합니다.

, BTW 나는 나는 그것이 실제로 출시되지 않습니다 MediaPlayer.에 문제가 있다고 생각하고 propably 일부 메모리 문제가 발생하여 음악 파일

+0

아니요, 안드로이드 2.2 startActivity (새로운 의도 ("com.aleksei.etb.END"))와 잘 작동합니다. 내 자신도 시험해 봤어. (방금 전에 전화했는데 완벽하게 작동했습니다.) – Alex

+1

"com.aleksei.etb.END"를 사용하여 End 클래스를 호출하려면 AndroidManifest에 선언해야합니다. <활동 안드로이드 : 이름 = ". 끝" 안드로이드 : 라벨 = "@ 문자열/APP_NAME"> <의도 필터> <액션 안드로이드 : 이름 = "com.aleksei.etb.END"/> < category android : name = "android.intent.category.DEFAULT"/> Alex

+0

@ 존 감사합니다. 저는이 방법을 몰랐습니다. 3 가지 가능성, 즉 2.2 Android의 일부 문제, MediaPlayer 또는 손상된 내 보낸 apk 문제가 있습니다. 전화로 디버그 모드를 돌리면서 연결하고 LogCat에 무엇이 나타나는지 보거나 중단 점을 사용하여 디버그합니다. – Koger

0

을 가지고 있지 않는 한, MediaPlayer를 초기화와 라인을 제거했다. 나는 또한 그것을 사용할 필요가있을 때마다 그것을 만드는 이유를 보지 못한다.

다른 것들에 대해서 IMO는 활동간에 값을 공유하기 위해 일부 정적 필드를 사용하는 것이 좋지 않습니다. 인 텐트, 엑스트라 및 값을 활동에 전달하십시오. 나는 당신이 SO에 대한 몇 가지 예를 찾을 것이라고 생각합니다.

+0

그래, 그냥 LogCat로 확인, 그것은 MediaPlayer했습니다. – Alex

+0

미안하지만, 예외 스택 추적을 보여줄 수 있습니까? – androdevo

+0

아, 너무 늦었 어, 알레 아디가 고쳤지 만, 그건 널이 아니야. – Alex

관련 문제