【问题标题】:Can't cast to Application with getApplication method无法使用 getApplication 方法强制转换为 Application
【发布时间】:2013-09-12 09:13:59
【问题描述】:

我有类App,其中包含我的Application 的上下文。 但是当我编译时,我在这一行的其他类中得到了一个error

 App app = (App) getApplication();

班级App:

import android.app.Application;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import com.example.Radio_KPI.R;
import com.example.Radio_KPI.Utils.Const;

public class App extends Application {

    private MediaPlayer player;
    private NotificationManager manager;
    private String curSong;
    private Context Main_con;

    public Context getMain_con() {
        return Main_con;
    }

    public void setMain_con(Context main_con) {
        Main_con = main_con;
    }

    public String getCurSong() {
        return curSong;
    }

    public void setCurSong(String curSong) {
        this.curSong = curSong;
    }

    public NotificationManager getManager() {
        return manager;
    }

    public void setManager(NotificationManager manager) {
        this.manager = manager;
    }

    public MediaPlayer getPlayer() {
        return player;
    }

    public void setPlayer(MediaPlayer mPlayer) {
        this.player = mPlayer;
    }

}

错误:

java.lang.ClassCastException: android.app.Application cannot be cast to com.example.Radio_KPI.Application.AppContext
        at com.example.Radio_KPI.Activities.Main.onCreate(Main.java:62)
        at android.app.Activity.performCreate(Activity.java:4531)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2150)

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.Radio_KPI"
          android:versionCode="1"
          android:versionName="1.0">

    <uses-sdk android:minSdkVersion="8"/>
    <uses-sdk android:targetSdkVersion="14"/>

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application android:label="@string/app_name" android:icon="@drawable/one">
        <activity android:name=".Activities.Main"
                  android:screenOrientation="portrait"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  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=".Activities.About"
                  android:screenOrientation="portrait"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:label="@string/app_name">
        </activity>
        <activity android:name=".Activities.SavedSongs"
                  android:screenOrientation="portrait"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:label="@string/savedSongs">
        </activity>
        <service
                android:name=".Services.MyService">
        </service>
    </application>
</manifest>

【问题讨论】:

  • 你能发布你的清单吗?
  • 是不是演员表应该是Application
  • @Biraj 我已经发布了。
  • @Sieryuu 如果我强制转换为 Application,我不能使用我的 App 类中的变量。
  • 根据您的堆栈跟踪,您不是转换为 App,而是转换为 Application.AppContext。并且请不要在您的包名中使用大写字母。

标签: java android android-context


【解决方案1】:
<application
    android:label="@string/app_name"
    android:icon="@drawable/one"
    android:name=".App" >

您需要在清单中指定使用您的自定义应用程序。

这里是完整的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.Radio_KPI"
          android:versionCode="1"
          android:versionName="1.0">

    <uses-sdk android:minSdkVersion="8"/>
    <uses-sdk android:targetSdkVersion="14"/>

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application
    android:name=".App"
    android:label="@string/app_name"
    android:icon="@drawable/one">
        <activity android:name=".Activities.Main"
                  android:screenOrientation="portrait"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  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=".Activities.About"
                  android:screenOrientation="portrait"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:label="@string/app_name">
        </activity>
        <activity android:name=".Activities.SavedSongs"
                  android:screenOrientation="portrait"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:label="@string/savedSongs">
        </activity>
        <service
                android:name=".Services.MyService">
        </service>
    </application>
</manifest>

【讨论】:

  • @p.Valery 请查看我编辑的答案。用它来替换你的 AndroidManifest.xml
  • 一切正常。谢谢你。
【解决方案2】:

更新这个

<application
        android:name=".App"
        android:icon="@drawable/ijoomer_luncher_icon"
        android:label="@string/app_name"
 >

【讨论】:

  • 是的,只添加这个“android:name=".App"”到你的标签
【解决方案3】:

使用这个..

在 Manifest.xml 中

<application
android:label="@string/app_name"
android:icon="@drawable/one"
android:name=".App" >

在活动中

App app = (App)getApplicationContext();

【讨论】:

    【解决方案4】:

    您是否在清单应用程序标签中注册了新的应用程序对象(App)?解决方法见以下应用标签sn-p。

    <application
            android:name=".App" 
            android:icon="@drawable/launcher_logo"
            android:label="@string/app_name" ... >
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多