150

I have a custom global class which looks like this

import android.app.Application;

public class MyApp extends Application {

    public String MainAct;

    public String getMainAct() {
        return MainAct;
    }

    public void setMainAct(String mainAct) {
        MainAct = mainAct;
    }
}

I want to preserve a string in this class via another Activity in its onCreate method.

    String local = "myLocalVariable";
    ((MyApp) getApplication()).setMainAct(local); //breaks here!!!
    String name = ((MyApp) getApplication()).getMainAct();

It breaks on the marked line with error: Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.xxx.yyy.global.MyApp

I've checked the code for five times and I cannot find error anywhere. Can anyone tell me where the error is?!

Thanks

sandalone
  • 40,244
  • 59
  • 212
  • 332

2 Answers2

517

The error states that the type of the object returned by getApplication is android.app.Application. A possible cause for this is that you failed to define the application in the manifest. Make sure that your manifest includes something in the lines of:

<application android:name=".MyApp"...
</application>
K-ballo
  • 78,684
  • 20
  • 152
  • 166
17

Another solution for older Android devices or emulators. You defined an application in the manifest:

    <application 
           android:name=".MyApp"...
    </application>

but you still have this problem?

Try to disable instant run:

  1. Disable an Instant run
  2. Clean and rebuild the project
  3. Remove the app from device and install it again without Instant run
Val
  • 4,027
  • 8
  • 34
  • 55