2012-02-13 11 views
0

現在、Java Androidブックを使用していますが、問題が発生しました。私は基本的なスードクアプリを作成していて、OnClickListenerを追加しようとしているので、誰かが「About」ボタンを押すとテキストが表示されます。このボタンが押されたときはいつでも、次のようなエラーメッセージが表示されます。 'アプリケーションSudokuが停止しました。もう一度お試しください。ここでAndroid OnClickエラー

は私のコード

マニフェストファイル

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="org.example.sudoku" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="8" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name"> 
     <activity 
      android:name=".Sudoku" 
      android:label="@string/app_name" > 

     <activity 
      android:name=".About" 
      android:label="@string/about_title"> 
     </activity> 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 

</manifest> 

である私は

クラスについて
package org.example.sudoku; 

import android.app.Activity; 
import android.os.Bundle; 



public class About extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.about); 
    } 

} 

を持っており、最後に私の数独のJavaクラスを探しているため

package org.example.sudoku; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.content.Intent; 
import android.view.View.OnClickListener; 

public class Sudoku extends Activity implements OnClickListener { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     //set up listeners for buttons 
     View continueButton = findViewById(R.id.continue_button); 
     continueButton.setOnClickListener(this); 
     View newButton = findViewById(R.id.new_button); 
     newButton.setOnClickListener(this); 
     View aboutButton = findViewById(R.id.about_button); 
     aboutButton.setOnClickListener(this); 
     View exitButton = findViewById(R.id.exit_button); 
     exitButton.setOnClickListener(this); 



    } 

    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.about_button: 
      Intent i = new Intent(this, About.class); 
      startActivity(i); 
      break; 
     } 

    } 
} 

おかげでそれで私は途中でeclipseを使用していますが、LogcatとDe-Buggerを使って試しましたが、運はありません。

LogCatエラー

02-13 20:33:08.376: E/AndroidRuntime(524): FATAL EXCEPTION: main 
02-13 20:33:08.376: E/AndroidRuntime(524): android.content.ActivityNotFoundException: Unable to find explicit activity class {org.example.sudoku/org.example.sudoku.About}; have you declared this activity in your AndroidManifest.xml? 
02-13 20:33:08.376: E/AndroidRuntime(524): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1508) 
02-13 20:33:08.376: E/AndroidRuntime(524): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1384) 
02-13 20:33:08.376: E/AndroidRuntime(524): at android.app.Activity.startActivityForResult(Activity.java:3190) 
02-13 20:33:08.376: E/AndroidRuntime(524): at android.app.Activity.startActivity(Activity.java:3297) 
02-13 20:33:08.376: E/AndroidRuntime(524): at org.example.sudoku.Sudoku.onClick(Sudoku.java:34) 
02-13 20:33:08.376: E/AndroidRuntime(524): at android.view.View.performClick(View.java:3511) 
02-13 20:33:08.376: E/AndroidRuntime(524): at android.view.View$PerformClick.run(View.java:14105) 
02-13 20:33:08.376: E/AndroidRuntime(524): at android.os.Handler.handleCallback(Handler.java:605) 
02-13 20:33:08.376: E/AndroidRuntime(524): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-13 20:33:08.376: E/AndroidRuntime(524): at android.os.Looper.loop(Looper.java:137) 
02-13 20:33:08.376: E/AndroidRuntime(524): at android.app.ActivityThread.main(ActivityThread.java:4424) 
02-13 20:33:08.376: E/AndroidRuntime(524): at java.lang.reflect.Method.invokeNative(Native Method) 
02-13 20:33:08.376: E/AndroidRuntime(524): at java.lang.reflect.Method.invoke(Method.java:511) 
02-13 20:33:08.376: E/AndroidRuntime(524): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
02-13 20:33:08.376: E/AndroidRuntime(524): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
02-13 20:33:08.376: E/AndroidRuntime(524): at dalvik.system.NativeStart.main(Native Method) 
+1

編集あなたの質問と 'Exception'(赤)とthe'Logcat'からの行を追加します。 'Logcat'に移動し、' Logcat'に何も表示されていなければ、 'All messages(no filter)'を左クリックしてください。 – Luksprog

+0

マニフェストではおそらく内部アクティビティに問題があります。あなたのタグについては内側にあります数独です。 –

答えて

1

私はそれが理由だかどうかわからないんだけど、ウルマニフェストファイルが台無しようです。これらの2つのアクティビティタグは混在しています。また、あなたのマニフェストを編集してください

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name"> 
    <activity 
     android:name=".Sudoku" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".About" 
     android:label="@string/about_title"> 
    </activity> 

</application> 
+0

上記を試して、logCatからエラーを追加しました。私はマニフェストファイルのレイアウトの本をたどっていました。 Thanks – mitchnufc

+0

エラーmsgsから、システムがアクティビティ宣言を見つけることができないようです。マニフェストの変更が役立つはずです。 – Selkie

0
Button aboutButton = (Button)findViewById(R.id.about_button); 
if (aboutButton != null) 
    aboutButton.setOnClickListener(this); 
else 
    Log.e("MyTag", "aboutButton not found on View"); 

:あなたはへのアプリケーションの一部を変更する必要があります。

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="org.example.sudoku" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="8" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name"> 
     <activity 
      android:name=".Sudoku" 
      android:label="@string/app_name" > 


      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".About" 
      android:label="@string/about_title"> 
     </activity> 

    </application> 

</manifest> 

これは動作するはずです。

+0

お返事ありがとうございましたが、この本の中であなたに与えられているものであり、私が本を読んでいる間、私の原始的な解決策が間違っていたことを私に説明することができますか?あなたが何を意味するのか知っていればトラックを外す – mitchnufc

+0

あなたのManifest.xmlが壊れています。あなたはSudokuActivityの "About"アクティビティを定義しました。 findViewById(リソース)の結果を期待するクラスにキャストすることも良いことです。結果をキャストしないと、Button、Textviewなどのメソッドを知らないViewオブジェクトを操作しています。 –

+0

ああ、それは意味が分かりませんが、明らかにこれはそれ自身の活動が必要です。どこに助けてくれてありがとう? – mitchnufc

1

マニフェストでアクティビティが正しく定義されていません。その一部は、以下のようにする必要があります:

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name"> 
     <activity 
      android:name=".Sudoku" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name=".About" 
      android:label="@string/about_title"> 
     </activity> 

    </application> 
0
<activity 
      android:name=".Sudoku" 
      android:label="@string/app_name" > 

     <activity 
      android:name=".About" 
      android:label="@string/about_title"> 
     </activity> 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

次のようになります。

<activity> 
     android:name=".Sudoku" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
</activity> 

<activity 
     android:name=".About" 
     android:label="@string/about_title"> 
    </activity>