Androidアプリをオブジェクト指向にして、特定のタイプの入力から呼び出すアクティビティを選択するクラス(DigitHandler)を作成しようとしています。 DigitHandlerは、ユーザーがInputCodeActivityと呼ばれる別のクラスのボタンをクリックすると呼び出されます。Androidのアクティビティを開始するとIllegalStateException/InvocationTargetExceptionが発生する
DigitHandlerこのlaunchGameメソッドを呼び出します:
private void launchGame()
{
Intent intent;
switch(digits[0])
{
case 0:
// Set random game from among the first three.
int randNum = (int)(Math.random() * 3) + 1;
digits[0] = randNum;
// Not sure whether that will work or just have it continue to 1.
// Not that important at the moment, since random game isn't in the specs.
case 1:
intent = new Intent(ctx, SimonActivity.class);
break;
case 2:
intent = new Intent(ctx, SquareActivity.class);
break;
case 3:
intent = new Intent(ctx, PegsActivity.class);
break;
case 4:
intent = new Intent(ctx, PipesActivity.class);
break;
default:
intent = new Intent(ctx, LightsActivity.class);
}
String difficulty = "";
switch(digits[2])
{
case 1:
difficulty = "easy";
break;
case 2:
difficulty = "medium";
break;
case 3:
difficulty = "hard";
break;
}
intent.putExtra(GameActivity.DIFFICULTY, difficulty);
// intent.putExtra(GameActivity.ADDITIONAL_PARAMS, barcodeData.additionalParams);
ctx.startActivity(intent);
}
しかし、最後の行(活動を開始)私にエラーを与えます。 (私はそれが最後の行であることを知っています。なぜなら、私がその行をコメントアウトすると、私はエラーを出さないからです。)エラーの原因を知ることはできません。ここにエラーとスタックのトレースがあります:
java.lang.IllegalStateException: Could not execute method of the activity
--------- Stack trace ---------
android.view.View$1.onClick(View.java:3841)
android.view.View.performClick(View.java:4456)
android.view.View$PerformClick.run(View.java:18465)
android.os.Handler.handleCallback(Handler.java:733)
android.os.Handler.dispatchMessage(Handler.java:95)
android.os.Looper.loop(Looper.java:136)
android.app.ActivityThread.main(ActivityThread.java:5086)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
dalvik.system.NativeStart.main(Native Method)
-------------------------------
--------- Cause ---------
java.lang.reflect.InvocationTargetException
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:515)
android.view.View$1.onClick(View.java:3836)
android.view.View.performClick(View.java:4456)
android.view.View$PerformClick.run(View.java:18465)
android.os.Handler.handleCallback(Handler.java:733)
android.os.Handler.dispatchMessage(Handler.java:95)
android.os.Looper.loop(Looper.java:136)
android.app.ActivityThread.main(ActivityThread.java:5086)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
dalvik.system.NativeStart.main(Native Method)
-------------------------------
--------- Device ---------
Brand: motorola
Device: condor_cdma
Model: XT830C
Id: KXC21.5-40
Product: condor_tracfone
-------------------------------
--------- Firmware ---------
SDK: 19
Release: 4.4.4
Incremental: 35
-------------------------------
私は間違って何をしていますか?
EDIT:コンテキストgetApplicationContext(である)、このようになり、現在の活動にokButtonClick()メソッドから渡された:DigitHandlerのコンストラクタにctxをなるコンテキスト(探し
public void okButtonClick(View view)
{
theNumber = numberPad.getText().toString();
Log.e("Recording the number", "Number is"+theNumber);
DigitHandler dh = new DigitHandler(getApplicationContext(), theNumber);
}
DigitHandlerはlaunchGame()に渡されます)と文字列theNumberが渡されます。
EDIT:try-catchブロックを使用して、InvocationTarget内で実際の例外が見つかりました: "アクティビティコンテキスト外からstartActivity()を呼び出すには、FLAG_ACTIVITY_NEW_TASKフラグが必要です。
だからはと発音しますが、私は単に文intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)を追加することができます。問題を解決してください。その警告とthis threadはそのようなサウンドを悪い考え方にしていますが、その理由を正確には分かりません。
このクラスのコンテキスト変数の参照をどのように渡しますか。アクティビティー・インスタンス参照でなければなりません。コンテキスト・リファレンスをアクティビティー・クラスから渡す方法を教えてください。 – EEJ
コンテキストとは何ですか?また、あなたの新しい活動のためのコードは何ですか?新しいアクティビティを開いているときに例外が発生しているようです – amiekuser