Android 我想将一个活动的arraylist访问到另一个活动(不使用intent),但得到classcastException
我想从一个活动访问另一个活动的arrayList,我已经尝试了如下操作,但它给了我ClassCast异常, logcatAndroid 我想将一个活动的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
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建议的解决方案是使用此链接中给出的意图。请参阅我的公式标题先生。我不想“传递”它。我只想使它可用于所有其他活动…明白吗?