2013-09-14 4 views
2

Я работаю над игрой для Android. QuestionActivity и EndgameActivity - это 2 класса в моей игре. Я хочу, когда моя игра над контролем передана в EndgameActivity. Для этого в классе QuestionActivty я добавитьНевозможно решить ошибки в android?

Intent i = new Intent(this, EndgameActivity.class); 
      startActivity(i); 
      finish(); 

в if(currentGame.isGameOver()) методом. Но после ответа на последний вопрос, когда моя игра над контролем не транслируется в EndgameActivity и log cat, отображающая следующие ошибки.

QuestionActivity class-

public class QuestionActivity extends Activity implements OnClickListener{ 

    private Question currentQ; 
    private GamePlay currentGame; 
    private CountDownTimer counterTimer; 

      @Override 
      public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.question); 
       processScreen(); 
     } 
       /** 
     * Configure current game and get question 
     */ 
     private void processScreen() 
     { 
     currentGame = ((CYKApplication)getApplication()).getCurrentGame(); 
     currentQ = currentGame.getNextQuestion(); 
     Button nextBtn1 = (Button) findViewById(R.id.answer1); 
     nextBtn1.setOnClickListener(this); 
     Button nextBtn2 = (Button) findViewById(R.id.answer2); 
     nextBtn2.setOnClickListener(this); 
     Button nextBtn3 = (Button) findViewById(R.id.answer3); 
     nextBtn3.setOnClickListener(this); 
     Button nextBtn4 = (Button) findViewById(R.id.answer4); 
     nextBtn4.setOnClickListener(this); 
     Button nextBtn5 = (Button) findViewById(R.id.answer5); 
     nextBtn5.setOnClickListener(this); 
     /** 
     * Update the question and answer options.. 
     */ 
     setQuestions(); 

    } 


    /** 
    * Method to set the text for the question and answers from the current games 
    * current question 
    */ 
    private void setQuestions() { 
     //set the question text from current question 
     String question = Utility.capitalise(currentQ.getQuestion()); 
     TextView qText = (TextView) findViewById(R.id.question); 
     qText.setText(question); 

     //set the available options 
     List<String> answers = currentQ.getQuestionOptions(); 
     TextView option1 = (TextView) findViewById(R.id.answer1); 
     option1.setText(Utility.capitalise(answers.get(0))); 

     TextView option2 = (TextView) findViewById(R.id.answer2); 
     option2.setText(Utility.capitalise(answers.get(1))); 

     TextView option3 = (TextView) findViewById(R.id.answer3); 
     option3.setText(Utility.capitalise(answers.get(2))); 

     TextView option4 = (TextView) findViewById(R.id.answer4); 
     option4.setText(Utility.capitalise(answers.get(3))); 

     int score = currentGame.getScore(); 
     String scr = String.valueOf(score); 
     TextView score1 = (TextView) findViewById(R.id.score); 
     score1.setText(scr); 

     counterTimer=new CountDownTimer(15000, 1000) { 
      public void onFinish() {     
       if(currentGame.getRound()==20) 
        System.exit(0); 
       currentGame.decrementScore1(); 
       processScreen(); 
          } 

      public void onTick(long millisUntilFinished) { 
       TextView time = (TextView) findViewById(R.id.timers); 
       time.setText(""+millisUntilFinished/1000); 
           } 
     }; 
     counterTimer.start(); 
    } 


    @Override 
    public void onResume() { 
     super.onResume(); 
    } 


    @Override 
    public void onClick(View arg0) { 
     //Log.d("Questions", "Moving to next question"); 
     if(arg0.getId()==R.id.answer5) 
     { 
     new AlertDialog.Builder(this) 
     .setMessage("Are you sure?") 
     .setCancelable(true) 
     .setPositiveButton("Yes", 
     new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, 
     int id) { 
       finish(); 
       } 
      }).setNegativeButton("No", null).show(); 

       } 

     else 
     { 
      if(!checkAnswer(arg0)) return; 

     /** 
     * check if end of game 
     */ 
     if (currentGame.isGameOver()){ 
      //Log.d("Questions", "End of game! lets add up the scores.."); 
      //Log.d("Questions", "Questions Correct: " + currentGame.getRight()); 
      //Log.d("Questions", "Questions Wrong: " + currentGame.getWrong()); 
      Intent i = new Intent(this, EndgameActivity.class); 
      startActivity(i); 
      finish(); 
     } 
      else 
      { 
      Intent i = new Intent(this, QuestionActivity.class); 
         finish(); 
         startActivity(i); 
     } 
     } 
     } 



    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     switch (keyCode) 
     { 
     case KeyEvent.KEYCODE_BACK : 
      return true; 
     } 

     return super.onKeyDown(keyCode, event); 
    } 


    /** 
    * Check if a checkbox has been selected, and if it 
    * has then check if its correct and update gamescore 
    */ 
    private boolean checkAnswer(View v) { 

     Button b = (Button) v; 
     String answer = b.getText().toString(); 
     counterTimer.cancel(); 
     b.setBackgroundResource(R.drawable.ans); 
     b.setEnabled(false); 
        //Log.d("Questions", "Valid Checkbox selection made - check if correct"); 
      if (currentQ.getAnswer().equalsIgnoreCase(answer)) 
      { 
       b.setBackgroundResource(R.drawable.ansgreen); 
       //Log.d("Questions", "Correct Answer!"); 
       currentGame.incrementScore(); 
      } 
      else{ 
       b.setBackgroundResource(R.drawable.ansred); 
       //Log.d("Questions", "Incorrect Answer!"); 
       currentGame.decrementScore(); 
      } 
      return true; 
     } 

} 

EndgameActivity class-

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class EndgameActivity extends Activity implements View.OnClickListener{ 
    Button menue1, adde1; 
    TextView escore1; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(findViewById(R.layout.endgame)); 
     menue1 = (Button) findViewById (R.id.menue); 
     menue1.setOnClickListener(this); 
     adde1 = (Button) findViewById(R.id.adde); 
     adde1.setOnClickListener(this); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     switch (keyCode) 
     { 
     case KeyEvent.KEYCODE_BACK : 
      return true; 
     } 

     return super.onKeyDown(keyCode, event); 
    } 


     @Override 
     public void onClick(View v) { 
      switch(v.getId()){ 
       case R.id.menue: 
        Intent i= new Intent(this, SplashActivity.class); 
        startActivity(i);  
        break; 
       case R.id.adde: 
        Intent j = new Intent(this, HighscoreActivity.class); 
        startActivity(j);     
       break; 

      } 
     } 

    } 

Вход кошка-

09-09 18:32:14.668: D/AndroidRuntime(7617): Shutting down VM 
09-09 18:32:14.668: W/dalvikvm(7617): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
09-09 18:32:14.688: E/AndroidRuntime(7617): FATAL EXCEPTION: main 
09-09 18:32:14.688: E/AndroidRuntime(7617): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=EndgameActivity } 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1622) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.app.Activity.startActivityForResult(Activity.java:3370) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.app.Activity.startActivityForResult(Activity.java:3331) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.app.Activity.startActivity(Activity.java:3566) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.app.Activity.startActivity(Activity.java:3534) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at com.abc.cyk.QuestionActivity.onClick(QuestionActivity.java:143) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.view.View.performClick(View.java:4204) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.view.View$PerformClick.run(View.java:17355) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.os.Handler.handleCallback(Handler.java:725) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.os.Looper.loop(Looper.java:137) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at java.lang.reflect.Method.invoke(Method.java:511) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
09-09 18:32:14.688: E/AndroidRuntime(7617):  at dalvik.system.NativeStart.main(Native Method) 
09-09 18:32:18.258: I/Process(7617): Sending signal. PID: 7617 SIG: 9 
09-09 18:32:18.758: E/Trace(7693): error opening trace file: No such file or directory (2) 
09-09 18:32:18.908: D/dalvikvm(7693): GC_FOR_ALLOC freed 58K, 8% free 2413K/2616K, paused 26ms, total 27ms 
09-09 18:32:18.918: I/dalvikvm-heap(7693): Grow heap (frag case) to 4.553MB for 2160016-byte allocation 
09-09 18:32:19.038: D/dalvikvm(7693): GC_FOR_ALLOC freed 1K, 5% free 4521K/4728K, paused 113ms, total 113ms 
09-09 18:32:19.088: D/dalvikvm(7693): GC_CONCURRENT freed <1K, 5% free 4521K/4728K, paused 4ms+3ms, total 50ms 
09-09 18:32:19.558: D/gralloc_goldfish(7693): Emulator without GPU emulation detected. 
09-09 18:32:21.728: I/Choreographer(7693): Skipped 71 frames! The application may be doing too much work on its main thread. 

Menifest File-

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.abc.cyk" 
     android:versionCode="3" 
     android:versionName="3.0"> 
    <application android:icon="@drawable/cyk_icon_bg" android:label="@string/app_name" android:name=".CYKApplication" > 
     <activity android:name=".SplashScreen" 
        android:label="@string/app_name" 
        android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".QuestionActivity" 
      android:screenOrientation="landscape" /> 
     <activity android:name=".SplashActivity" 
      android:screenOrientation="portrait" /> 
     <activity android:name=".RulesActivity" 
      android:screenOrientation="portrait" /> 
     <activity android:name=".EndgameActivity" 
      android:screenOrientation="portrait" /> 
     <activity android:name=".HighscoreActivity" 
      android:screenOrientation="portrait" /> 
     <activity android:name=".SettingsActivity" 
      android:screenOrientation="portrait" /> 
     <activity android:name=".AnswersActivity" /> 
    </application> 
    <uses-sdk android:minSdkVersion="2" /> 

</manifest> 

Я думаю, может быть, некоторая ошибка в методе таймера, которая вызывает эти ошибки. Кто-нибудь знает, как решить эту ошибку?

+1

проверить файл манифеста, если вы объявили о деятельности там – Raghunandan

+0

Может быть вам не хватает реестра или объявить активность в файле манифеста .. – Piyush

+0

Я уже добавил, что в манифестном файле. –

ответ

0

я иду через код, удалить findViewById из кода

setContentView(findViewById(R.layout.endgame)); 
0

Addyour EndGame Деятельность в файле манифеста. Logcat ясно говорит

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=EndgameActivity } 

Просто добавьте EndgameActivity в файл манифеста внутри нового тега активности.

+0

Я уже добавил, что в манифестном файле. –

1
Check your manifest file you register activity 
android.content.ActivityNotFoundException: No Activity found to handle Intent {  act=EndgameActivity } 
+0

Я уже добавил, что в манифестном файле. –

1

Проблема не в том, что ваш EndgameActivity не может быть найден. Исключение:

ActivityNotFoundException: No Activity found to handle Intent { act=EndgameActivity } 

говорит вам, что EndgameActivity так или иначе рассматривается как действие. Это странно, потому что не являются ни с помощью конструктора Intent (String):

Intent i = new Intent("EndgameActivity"); 

Также с помощью Intent # SetAction (String).

Попробуйте использовать полное имя класса:

Intent i = new Intent(com.abc.cyk.QuestionActivity.this, 
              com.abc.cyk.EndgameActivity.class); 

Еще одна вещь, которую вы можете попробовать:

Intent i = new Intent(); 
i.setClass(QuestionActivity.this, com.abc.cyk.EndgameActivity.class); 
startActivity(i); 
finish(); 

Хотя его отношения к текущей проблеме, я заметил, что в EndgameActivity # OnCreate (Bundle), вы используете:

setContentView(findViewById(R.layout.endgame)); 

Следует изменить:

setContentView(R.layout.endgame); 
Смежные вопросы