Android - java.lang.classcastexception android.app.application无法强制转换

时间:2013-07-10 03:49:22

标签: java android android-activity

我是一个Android新手,我正在构建一个关于教程的Android应用程序,我想在其中包含游戏功能,我已经拥有游戏的源代码,我已经将所有类导入到我的项目中,然而当我尝试运行应用程序时我得到一个错误,它说“android.app.application java.lang.ClassCastException不能转换为com.wglxy.example.dash1.ChuckApplication”,我认为那是因为我喜欢2名为HomeActivity.java(Main)和ChuckApplication.java(第二个)的活动有不同的扩展(DashboardActivity& Application)我真的不知道如何解决这个问题,我试过

  1. 将游戏应用程序设为库(不工作)
  2. 结合活动(不工作)
  3. 修改内容过滤器>类别(不工作)

    但我的项目没有任何效果

  4. SplashActivity.java:

        import java.io.IOException;
        import java.util.List;
    
        import android.app.Activity;
        import android.content.Intent;
        import android.content.SharedPreferences;
        import android.database.SQLException;
        import android.os.Bundle;
        import android.view.View;
        import android.view.View.OnClickListener;
        import android.widget.Button;
    
        import com.tmm.android.chuck.db.DBHelper;
        import com.tmm.android.chuck.quiz.Constants;
        import com.tmm.android.chuck.quiz.GamePlay;
        import com.tmm.android.chuck.quiz.Question;
    
        public class SplashActivity extends Activity implements OnClickListener{
    
    
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.welcome);
    
                //////////////////////////////////////////////////////////////////////
                //////// GAME MENU  /////////////////////////////////////////////////
                Button playBtn = (Button) findViewById(R.id.playBtn);
                playBtn.setOnClickListener(this);
                Button settingsBtn = (Button) findViewById(R.id.settingsBtn);
                settingsBtn.setOnClickListener(this);
                Button rulesBtn = (Button) findViewById(R.id.rulesBtn);
                rulesBtn.setOnClickListener(this);
                Button exitBtn = (Button) findViewById(R.id.exitBtn);
                exitBtn.setOnClickListener(this);
            }
    
    
            /**
             * Listener for game menu
             */
            @Override
            public void onClick(View v) {
                Intent i;
    
                switch (v.getId()){
                case R.id.playBtn :
                    //once logged in, load the main page
                    //Log.d("LOGIN", "User has started the game");
    
                    //Get Question set //
                    List<Question> questions = getQuestionSetFromDb();
    
                    //Initialise Game with retrieved question set ///
                    GamePlay c = new GamePlay();
                    c.setQuestions(questions);
                    c.setNumRounds(getNumQuestions());
                    ((ChuckApplication)getApplication()).setCurrentGame(c);  
    
                    //Start Game Now.. //
                    i = new Intent(this, QuestionActivity.class);
                    startActivityForResult(i, Constants.PLAYBUTTON);
                    break;
    
                case R.id.rulesBtn :
                    i = new Intent(this, RulesActivity.class);
                    startActivityForResult(i, Constants.RULESBUTTON);
                    break;
    
                case R.id.settingsBtn :
                    i = new Intent(this, SettingsActivity.class);
                    startActivityForResult(i, Constants.SETTINGSBUTTON);
                    break;
    
                case R.id.exitBtn :
                    finish();
                    break;
                }
    
            }
    
    
            /**
             * Method that retrieves a random set of questions from
             * the database for the given difficulty
             * @return
             * @throws Error
             */
            private List<Question> getQuestionSetFromDb() throws Error {
                int diff = getDifficultySettings();
                int numQuestions = getNumQuestions();
                DBHelper myDbHelper = new DBHelper(this);
                try {
                    myDbHelper.createDataBase();
                } catch (IOException ioe) {
                    throw new Error("Unable to create database");
                }
                try {
                    myDbHelper.openDataBase();
                }catch(SQLException sqle){
                    throw sqle;
                }
                List<Question> questions = myDbHelper.getQuestionSet(diff, numQuestions);
                myDbHelper.close();
                return questions;
            }
    
    
            /**
             * Method to return the difficulty settings
             * @return
             */
            private int getDifficultySettings() {
                SharedPreferences settings = getSharedPreferences(Constants.SETTINGS, 0);
                int diff = settings.getInt(Constants.DIFFICULTY, Constants.MEDIUM);
                return diff;
            }
    
            /**
             * Method to return the number of questions for the game
             * @return
             */
            private int getNumQuestions() {
                SharedPreferences settings = getSharedPreferences(Constants.SETTINGS, 0);
                int numRounds = settings.getInt(Constants.NUM_ROUNDS, 20);
                return numRounds;
            }
    
        }
    

    这是我的HomeActivity.java

    /*
     * Copyright (C) 2011 Wglxy.com
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    package com.wglxy.example.dash1;
    
    import android.os.Bundle;
    
    /**
     * This is a simple activity that demonstrates the dashboard user interface
     * pattern.
     *
     */
    
    public class HomeActivity extends DashboardActivity
    {
    
        /**
         * onCreate - called when the activity is first created. Called when the
         * activity is first created. This is where you should do all of your normal
         * static set up: create views, bind data to lists, etc. This method also
         * provides you with a Bundle containing the activity's previously frozen
         * state, if there was one.
         *
         * Always followed by onStart().
         *
         */
    
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home);
        }
    
        /**
         * onDestroy The final call you receive before your activity is destroyed.
         * This can happen either because the activity is finishing (someone called
         * finish() on it, or because the system is temporarily destroying this
         * instance of the activity to save space. You can distinguish between these
         * two scenarios with the isFinishing() method.
         *
         */
    
        protected void onDestroy()
        {
            super.onDestroy();
        }
    
        /**
         * onPause Called when the system is about to start resuming a previous
         * activity. This is typically used to commit unsaved changes to persistent
         * data, stop animations and other things that may be consuming CPU, etc.
         * Implementations of this method must be very quick because the next
         * activity will not be resumed until this method returns. Followed by
         * either onResume() if the activity returns back to the front, or onStop()
         * if it becomes invisible to the user.
         *
         */
    
        protected void onPause()
        {
            super.onPause();
        }
    
        /**
         * onRestart Called after your activity has been stopped, prior to it being
         * started again. Always followed by onStart().
         *
         */
    
        protected void onRestart()
        {
            super.onRestart();
        }
    
        /**
         * onResume Called when the activity will start interacting with the user.
         * At this point your activity is at the top of the activity stack, with
         * user input going to it. Always followed by onPause().
         *
         */
    
        protected void onResume()
        {
            super.onResume();
        }
    
        /**
         * onStart Called when the activity is becoming visible to the user.
         * Followed by onResume() if the activity comes to the foreground, or
         * onStop() if it becomes hidden.
         *
         */
    
        protected void onStart()
        {
            super.onStart();
        }
    
        /**
         * onStop Called when the activity is no longer visible to the user because
         * another activity has been resumed and is covering this one. This may
         * happen either because a new activity is being started, an existing one is
         * being brought in front of this one, or this one is being destroyed.
         *
         * Followed by either onRestart() if this activity is coming back to
         * interact with the user, or onDestroy() if this activity is going away.
         */
    
        protected void onStop()
        {
            super.onStop();
        }
    
        /**
         */
        // Click Methods
    
        /**
         */
        // More Methods
    
    } // end class
    

    这是我的ChuckApllicatiin:

    /**
     *
     */
    package com.wglxy.example.dash1;
    
    import android.app.Application;
    
    /**
     * @author rob
     *
     */
    public class ChuckApplication extends Application
    {
        private GamePlay currentGame;
    
        /**
         * @param currentGame
         *            the currentGame to set
         */
        public void setCurrentGame(GamePlay currentGame)
        {
            this.currentGame = currentGame;
        }
    
        /**
         * @return the currentGame
         */
        public GamePlay getCurrentGame()
        {
            return currentGame;
        }
    }
    

    这是我的manifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.wglxy.example.dash1"
        android:versionCode="1"
        android:versionName="1.0" >
        <application
            android:icon="@drawable/icon"
            android:label="@string/app_name"
            android:theme="@style/Theme.D1" >
            <activity
                android:name=".HomeActivity"
                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=".Tutorial"
                android:label="@string/title_feature1"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Game"
                android:label="@string/title_feature2"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Setting"
                android:label="@string/title_feature3"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Qiblah"
                android:label="@string/title_feature4"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Takbir"
                android:label="@string/title_feature5"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Qiyam"
                android:label="@string/title_feature6"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Ruku"
                android:label="@string/title_feature7"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Sajdah"
                android:label="@string/title_feature8"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".SitBetw"
                android:label="@string/title_feature9"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Qunut"
                android:label="@string/title_feature10"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Tahiyyatul"
                android:label="@string/title_feature11"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Salam"
                android:label="@string/title_feature12"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Subuh"
                android:label="@string/title_feature13"
                android:screenOrientation="portrait"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Dhuhur"
                android:label="@string/title_feature14"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Asr"
                android:label="@string/title_feature15"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Maghrib"
                android:label="@string/title_feature17"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Isha"
                android:label="@string/title_feature18"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Dhuha"
                android:label="@string/title_feature19"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Witir"
                android:label="@string/title_feature20"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Ied"
                android:label="@string/title_feature21"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Tarawih"
                android:label="@string/title_feature22"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Tahajud"
                android:label="@string/title_feature23"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".BasicMain"
                android:label="@string/title_feature23"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Fardh"
                android:label="@string/title_feature23"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Sunnah"
                android:label="@string/title_feature23"
                android:theme="@style/Theme.D1" />
            <activity
                android:name=".Dalil"
                android:label="@string/title_feature23"
                android:theme="@style/Theme.D1" />
            <!--
                <activity android:name=".AboutActivity"
                      android:theme="@style/Theme.D1"
                      android:label="@string/title_about"
                      />
                <activity android:name=".SearchActivity"
                      android:theme="@style/Theme.D1"
                      android:label="@string/title_search"
                      />
            -->
            <activity
                android:name=".SplashActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".QuestionActivity" />
            <activity android:name=".RulesActivity" />
            <activity android:name=".EndgameActivity" />
            <activity android:name=".SettingsActivity" />
            <activity android:name=".AnswersActivity" />
        </application>
        <uses-sdk android:minSdkVersion="11" />
        <tool-api-level>
            11
        </tool-api-level>
    </manifest>
    

    这是我的日志:

    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): FATAL EXCEPTION: main
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): java.lang.ClassCastException: android.app.Application cannot be cast to com.wglxy.example.dash1.ChuckApplication
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at com.wglxy.example.dash1.SplashActivity.onClick(SplashActivity.java: 57)
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at android.view.View.performClick(View.java: 4202)
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at android.view.View$PerformClick.run(View.java: 17340)
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at android.os.Handler.handleCallback(Handler.java: 725)
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at android.os.Handler.dispatchMessage(Handler.java: 92)
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at android.os.Looper.loop(Looper.java: 137)
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at android.app.ActivityThread.main(ActivityThread.java: 5039)
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at java.lang.reflect.Method.invokeNative(Native Method)
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at java.lang.reflect.Method.invoke(Method.java: 511)
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 793)
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 560)
    07 - 10 11: 38: 01.946: E / AndroidRuntime(7548): at dalvik.system.NativeStart.main(Native Method)
    

    任何人都知道如何解决我的问题?

2 个答案:

答案 0 :(得分:3)

问:您的清单中的哪个位置指定了您的Application类?例如:

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/Theme.D1" 
    android:name="com.wglxy.example.dash1.ChuckApplication" >
    ...

此链接可能有所帮助:

Custom global Application class breaks with "android.app.Application cannot be cast to"

答案 1 :(得分:1)

您可以将子类对象转换为父类对象,但不能执行相反的操作。您正在尝试将应用程序转换为ChuckApplication,这是不合法的。