0

初めて、次のURLを使用してAndroidでアプリを作成する方法に関するチュートリアルを確認します:MyFirstApp

実行すると、LogCatを介してスタックトレースでClassCastExceptionが発生しました。これは次のようになります。

03-02 13:18:49.365: E/AndroidRuntime(1996): FATAL EXCEPTION: main 
03-02 13:18:49.365: E/AndroidRuntime(1996): java.lang.IllegalStateException: Could not execute method of the activity 
03-02 13:18:49.365: E/AndroidRuntime(1996):     at android.view.View$1.onClick(View.java:3044) 
03-02 13:18:49.365: E/AndroidRuntime(1996):     at android.view.View.performClick(View.java:3511) 
03-02 13:18:49.365: E/AndroidRuntime(1996):     at android.view.View$PerformClick.run(View.java:14105) 
03-02 13:18:49.365: E/AndroidRuntime(1996):     at android.os.Handler.handleCallback(Handler.java:605) 
03-02 13:18:49.365: E/AndroidRuntime(1996):     at android.os.Handler.dispatchMessage(Handler.java:92) 
03-02 13:18:49.365: E/AndroidRuntime(1996):     at android.os.Looper.loop(Looper.java:137) 
03-02 13:18:49.365: E/AndroidRuntime(1996):     at android.app.ActivityThread.main(ActivityThread.java:4424) 
03-02 13:18:49.365: E/AndroidRuntime(1996):     at java.lang.reflect.Method.invokeNative(Native Method) 
03-02 13:18:49.365: E/AndroidRuntime(1996):     at java.lang.reflect.Method.invoke(Method.java:511) 
03-02 13:18:49.365: E/AndroidRuntime(1996):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-02 13:18:49.365: E/AndroidRuntime(1996):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-02 13:18:49.365: E/AndroidRuntime(1996):     at dalvik.system.NativeStart.main(Native Method)
03-02 13:18:49.365: E/AndroidRuntime(1996): Caused by: java.lang.reflect.InvocationTargetException
03-02 13:18:49.365: E/AndroidRuntime(1996):     at java.lang.reflect.Method.invokeNative(Native Method)
03-02 13:18:49.365: E/AndroidRuntime(1996):     at java.lang.reflect.Method.invoke(Method.java:511)
03-02 13:18:49.365: E/AndroidRuntime(1996):     at android.view.View$1.onClick(View.java:3039)
03-02 13:18:49.365: E/AndroidRuntime(1996):     ... 11 more
03-02 13:18:49.365: E/AndroidRuntime(1996): Caused by: java.lang.ClassCastException: com.android.internal.view.menu.ActionMenuItemView cannot be cast to android.widget.TextView
03-02 13:18:49.365: E/AndroidRuntime(1996):     at com.example.myfirstapp.MainActivity.sendMessage(MainActivity.java:34)
03-02 13:18:49.365: E/AndroidRuntime(1996):     ... 14 more

これは、クラスMainActivityのメソッドsendMessage(View view)を参照しています。元々は次のようになりました。

public void sendMessage(View view)
{
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

ただし、これにより同じClassCastExceptionの問題が発生しました。私の研究で私はこの記事に出くわしました: http ://code.google.com/p/android/issues/detail?id = 32941

これは、EditTextオブジェクトをTextViewオブジェクトで変更する必要があることを示しています。私はそれをしました。これで、私のメソッドは次のようになります。

public void sendMessage(View view)
{
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    //EditText editText = (EditText) findViewById(R.id.edit_message);
    TextView tView = (TextView)findViewById(R.id.edit_message);
    String message = tView.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

それはうまくコンパイルされました。しかし、スタックトレースログに記録されているのと同じClassCastExceptionがまだ発生しています。これを修正する方法がわかりません。お知らせ下さい。

アラン

4

1 に答える 1

1

あなたのres/layout/activity_main.xml(これはデフォルトのレイアウトファイルであり、プロジェクトで別の名前を付けることができます)では、どのような種類edit_messageですか?

それはあなたのキャストで同じものでなければなりません(TextView)findViewById(R.id.edit_message);

于 2013-03-03T17:53:51.910 に答える