Android 我想将一个活动的arraylist访问到另一个活动(不使用intent),但得到classcastException

Android 我想将一个活动的arraylist访问到另一个活动(不使用intent),但得到classcastException,android,arraylist,classcastexception,Android,Arraylist,Classcastexception,我想从一个活动访问另一个活动的arrayList,我已经尝试了如下操作,但它给了我ClassCast异常, logcat 08-02 11:33:37.438: E/AndroidRuntime(1940): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.eps.blancatours/com.eps.blancatours.ui.AddBookingpopupActivity}: java.lang

我想从一个活动访问另一个活动的arrayList,我已经尝试了如下操作,但它给了我ClassCast异常, logcat

08-02 11:33:37.438: E/AndroidRuntime(1940): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.eps.blancatours/com.eps.blancatours.ui.AddBookingpopupActivity}: java.lang.ClassCastException: android.app.Application cannot be cast to com.eps.blancatours.ui.DestinationsActivity
08-02 11:33:37.438: E/AndroidRuntime(1940):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at android.app.ActivityThread.access$700(ActivityThread.java:168)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at android.os.Looper.loop(Looper.java:176)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at android.app.ActivityThread.main(ActivityThread.java:5493)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at java.lang.reflect.Method.invokeNative(Native Method)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at java.lang.reflect.Method.invoke(Method.java:525)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at dalvik.system.NativeStart.main(Native Method)
08-02 11:33:37.438: E/AndroidRuntime(1940): Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.eps.blancatours.ui.DestinationsActivity
08-02 11:33:37.438: E/AndroidRuntime(1940):     at com.eps.blancatours.ui.AddBookingpopupActivity.onCreate(AddBookingpopupActivity.java:30)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at android.app.Activity.performCreate(Activity.java:5372)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
08-02 11:33:37.438: E/AndroidRuntime(1940):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
destinationActivity.java

 public class MyApp extends Application {
        public ArrayList<String> getState() {
            return names;
        }

        public void setState(ArrayList<String> s) {
            names = s;
        }
    }
   MyApp appState = ((MyApp)getApplicationContext());
          dest = appState.getState();

因为
getApplicationContext()
将返回应用程序对象,而不是活动


另外,
dest=newarraylist()也没有意义
如果您要立即覆盖它。

您不能将
getApplicationContext
强制转换到第一个活动,它只会返回应用程序上下文的引用,而不是
destinationActivity
,从而给您
类强制转换异常


相反,您可以通过intent传递arraylist,从中启动Logcat中明确提到的
secondactivity
错误,这是

原因:java.lang.ClassCastException:android.app.Application无法强制转换为com.eps.blancatours.ui.DestinationsActivity

这意味着您被强制转换为一个不可能的活动

由于您希望对应用程序中的所有活动使用相同的ArrayList,因此需要在
应用程序类中声明该ArrayList

应用程序类
中声明此代码,而不是
destinationActivity.java

public ArrayList<String> names;

names = new ArrayList<String>();

public ArrayList<String> getState() {
    return names;
}

public void setState(ArrayList<String> s) {
    names = s;
}
公共数组列表名称;
名称=新的ArrayList();
公共阵列列表getState(){
返回姓名;
}
公共无效设置状态(ArrayList s){
名称=s;
}
要在任何其他活动中使用此ArrayList,您需要使用以下代码

MyApplicationClass applicaionClass = (MyApplicationClass) getApplication();

ArrayList<String> mStateNames = (ArrayList<String>) applicaionClass.getState();
MyApplicationClass应用程序类=(MyApplicationClass)getApplication();
ArrayList mStateNames=(ArrayList)applicationClass.getState();

我在常量类中将arrayList声明为全局变量,并将其声明为staic,我的代码如下

public static ArrayList<HashMap<String, String>> dest = new ArrayList<HashMap<String, String>>();
publicstaticarraylistdest=newarraylist();
使用

dest = new ArrayList<HashMap<String, String>>();
        dest = Const.dest;
dest=newarraylist();
dest=常数dest;

显示Logcat输出。可能您的问题在于
DestinationsActivity appState=((DestinationsActivity)getApplicationContext())这可能会帮助您@SilentKiller请查看我的edit@GiruBhai-我知道这很容易就能做到,但我不会从一个活动转到另一个活动,明白我的意思吗?我只想访问所有其他活动都可用的arrayList我只想在不使用意图的情况下将一个活动的arrayList用于另一个活动。@user3820044您可以将其设置为静态,这是一个非常糟糕的主意,或者您可以使用意图将arrayList传递给第二个活动。静态不一定是坏的。“活动”中的静态数据有点难闻,但多个活动使用的数据结构作为一个单例保存并不少见。@Gabeschen使用静态arraylist也是一个安全缺陷。@Rod_Algonquin否。不仅仅是因为有一个静态变量。它可能是一个变量的一部分,但静态变量本身并不是一个安全缺陷。@user3820044建议的解决方案是使用此链接中给出的意图。请参阅我的公式标题先生。我不想“传递”它。我只想使它可用于所有其他活动…明白吗?