android - java.lang.ClassCastException : android. app.ContextImpl 错误

标签 android classcastexception scoreninja

我正在尝试将 ScoreNinja 合并到我的小游戏中:http://scoreninja.appspot.com/

但是,每次都会抛出运行时异常:

05-24 23:22:59.888: ERROR/AndroidRuntime(21237): FATAL EXCEPTION: main
05-24 23:22:59.888: ERROR/AndroidRuntime(21237): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shaq.pushcounter/com.shaq.pushcounter.ChickenPushupTimer}: java.lang.ClassCastException: android.app.ContextImpl
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at android.os.Looper.loop(Looper.java:123)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at android.app.ActivityThread.main(ActivityThread.java:3687)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at java.lang.reflect.Method.invokeNative(Native Method)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at java.lang.reflect.Method.invoke(Method.java:507)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at dalvik.system.NativeStart.main(Native Method)


05-24 23:22:59.888: ERROR/AndroidRuntime(21237): Caused by: java.lang.ClassCastException: android.app.ContextImpl
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at com.scoreninja.adapter.ScoreNinjaAdapter.<init>(ScoreNinjaAdapter.java:85)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at com.shaq.pushcounter.ChickenPushupTimer.onCreate(ChickenPushupTimer.java:31)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
05-24 23:22:59.888: ERROR/AndroidRuntime(21237):     ... 11 more

问题可能是ChickenPushupTimer.java:31。

这是我的整个 Java 文件:

public class ChickenPushupTimer extends Activity
{
    int count = 0;
    TextView timeLeft;
    TextView totalPushups;
    ImageButton button;
    SoundManager mSoundManager;
    Vibrator myVib;
    ScoreNinjaAdapter scoreNinjaAdapter;

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chickentimer);
        scoreNinjaAdapter = new ScoreNinjaAdapter(getBaseContext(), "cockpushups", "71A7AD115870BA0E05C13BE2B9D3F984");

        myVib = (Vibrator) this.getSystemService(VIBRATOR_SERVICE);
        mSoundManager = new SoundManager();
        mSoundManager.initSounds(getBaseContext());
        mSoundManager.addSound(1, R.raw.chicken);

        timeLeft = (TextView) findViewById(R.id.timeLeft);
        totalPushups = (TextView) findViewById(R.id.totalPushups);
        button = (ImageButton) findViewById(R.id.chickenbutton);

        countdownTimer();

        button.setOnClickListener(new View.OnClickListener()
        {

            public void onClick(View v)
            {
                myVib.vibrate(250);
                count++;
                totalPushups.setText("" + count);
                mSoundManager.playSound(1);
            }
        });
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.popupmenu, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
        case R.id.goback:
            /*Intent myIntent = new Intent(getBaseContext(), MainMenu.class);
            startActivity(myIntent);*/
            finish();
            return true;
     //   case R.id.help:
     //       showHelp();
     //       return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    public void countdownTimer()
    {
        new CountDownTimer(16000, 1000) {

             public void onTick(long millisUntilFinished) {
                 timeLeft.setText("" + millisUntilFinished / 1000);
             }

             public void onFinish() {
                 scoreNinjaAdapter.show(count);
                 finish();
             }
          }.start();
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {
        super.onActivityResult(requestCode, resultCode, data);
        scoreNinjaAdapter.onActivityResult(requestCode, resultCode, data);
    }
}

这是第 31 行:

scoreNinjaAdapter = new ScoreNinjaAdapter(getBaseContext(), "cockpushups", "71A7AD115870BA0E05C13BE2B9D3F984");

我使用的上下文可能有问题。任何帮助将不胜感激!!

最佳答案

如果您查看 ScoreNinjaAdapter 的代码 here ,它表明它将上下文转换为 Activity。尝试使用 this 而不是 getBaseContext,因为您是从 Activity 中调用的。

关于android - java.lang.ClassCastException : android. app.ContextImpl 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6119248/

相关文章:

java - java中奇怪的ClassCastException

使用数据类填充 TableView 时出现 java.lang.ClassCastException

java - ClassLoader问题导致ClassCastException的解决方法

android - Jetpack Navigation 中从 RecyclerView 到 Detail Fragment 的共享元素转换

android - 透明、 float 的 Android Activity 不允许更新其背后的内容

android - MediaPlayer 设置数据源方法中的 IllegalStateException

android - 如何正确地将图像上传到 Jetpack Compose 中的 LazyList 中的项目?