0

このチュートリアルを読み、そのコードを使用してゲームに ScoreLoop サービスを実装しました。スコアの送信は正常に機能しますが、他の Android アクティビティまたは単純なトースト メッセージを表示すると、NullPointer エラーでクラッシュします。

インライン クラッシュ:

Intent intent = new Intent(mContext, EntryScreenActivity.class);

そして:

Toast.makeText(mContext, "Refreshing scores", Toast.LENGTH_SHORT).show(); 

デバッグ モードでは、mContext が null ではないことがわかりました

エラーはどこにあり、どのように修正しますか?

LogCat:

08-22 17:54:27.329: E/AndroidRuntime(15468): java.lang.NullPointerException 08-22 17:54:27.329: E/AndroidRuntime(15468): at android.content.ContextWrapper.getResources(ContextWrapper.java:81) 08-22 17:54:27.329: E/AndroidRuntime(15468): at android.widget.Toast.<init>(Toast.java:92) 08-22 17:54:27.329: E/AndroidRuntime(15468): at android.widget.Toast.makeText(Toast.java:233) 08-22 17:54:27.329: E/AndroidRuntime(15468): at com.masterofcode.android.slingshot.ActionResolverAndroid$3.run(ActionResolverAndroid.java:46) 08-22 17:54:27.329: E/AndroidRuntime(15468): at android.os.Handler.handleCallback(Handler.java:605) 08-22 17:54:27.329: E/AndroidRuntime(15468): at android.os.Handler.dispatchMessage(Handler.java:92) 08-22 17:54:27.329: E/AndroidRuntime(15468): at android.os.Looper.loop(Looper.java:137) 08-22 17:54:27.329: E/AndroidRuntime(15468): at android.app.ActivityThread.main(ActivityThread.java:4424) 08-22 17:54:27.329: E/AndroidRuntime(15468): at java.lang.reflect.Method.invokeNative(Native Method) 08-22 17:54:27.329: E/AndroidRuntime(15468): at java.lang.reflect.Method.invoke(Method.java:511) 08-22 17:54:27.329: E/AndroidRuntime(15468): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 08-22 17:54:27.329: E/AndroidRuntime(15468): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 08-22 17:54:27.329: E/AndroidRuntime(15468): at dalvik.system.NativeStart.main(Native Method)

========================================================================

public class ActionResolverAndroid implements ActionResolver {
  Handler uiThread;
  BumbleAndroid mContext; //Your class here which extends AndroidApplication
  ScoreloopHandler handler;

  public ActionResolverAndroid(BumbleAndroid mContext) {
      uiThread = new Handler(); //This binds the handler to the "main" thread, see documentation of handler
      this.mContext = mContext;
      handler = new ScoreloopHandler(mContext);
  }
}

このようにして、mContextを取得します

4

2 に答える 2

1

この質問: Null at android.content.ContextWrapper.getResources(ContextWrapper.java:80)は、間違ったコンテキストで呼び出されたときに getResources が null を返すことを意味します (トーストを作成するには、現在のアクティビティのコンテキストが必要なようです)。

同様の意味を持つ別のものを次に示します: Activity Context と Application Context の違い

これに関するより具体的なドキュメントを見つけるといいのですが、見つかりませんでした...

于 2012-08-22T17:23:41.520 に答える
0

問題は間違った mContext にありました。

正しいコードは次のとおりです。

public class MyGameAndroidActivity extends AndroidApplication implements
        ActionResolver {
public void showScoreloop() {
        Intent intent = new Intent(this, EntryScreenActivity.class);
        this.startActivity(intent);
    }
}
于 2012-08-23T07:47:28.743 に答える