通过Intents传递ArrayList <string> - 尝试了StackOverflow上的所有内容</string>

时间:2013-10-31 10:26:21

标签: android android-intent arraylist

我遇到了一些简单问题。

我正试图通过这样的Intent传递ArrayList<String>

        lupa.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, lupa.class);
                    System.out.println(lista2); // Shows me the ArrayList<String>
            intent.putStringArrayListExtra("lista",lista2);
                    System.out.println("done"); // Checking
            startActivity(intent);  
                    System.out.println("done2"); // Checking again
        }

'lista2'是一个全局变量:             ArrayList<String> lista2 = new ArrayList<String>();,但我也尝试使用局部变量,我也尝试使用Bundle。

会发生什么:应用程序突然关闭而没有任何消息,并且LogCat上没有消息。我只是得到了三个System.out.println(...),但正如我所说,它会在没有任何消息的情况下关闭。

intent.putStringArrayListExtra("lista",lista2);上的问题是100%,因为如果我用//对其进行评论,则会转到另一项活动。

怎么了?


我发现我创建了一个简单的ArrayList<String>,如下所示:

                ArrayList<String> lista3 = new ArrayList<String>();
            lista3.add("ola");
            lista3.add("k");
            lista3.add("ase");

它适用于intent.putStringArrayListExtra("lista",lista3);

我的ArrayList<String>是全球性的,我试图通过以下方式复制它:

ArrayList<String> lista3 = new ArrayList<String>();
lista3 = (ArrayList<String>)lista2.clone(); // lista2 is the global one

ArrayList<String> lista3 = new ArrayList<String>(lista2);

并没有发生intent.putStringArrayListExtra("lista",lista3);


我又得到了消息。

lista2.size()5528,所以我认为它非常大。

我正在做FOR并在列表中添加内容,我终于得到3374是我可以在活动之间传递的最大ArrayList<String>大小。如果我设置3375同样的事情发生(它关闭但没有消息)......


现在我可以得到(我现在不知道为什么)Logcat:

11-01 00:19:27.025: D/PowerManagerService(2017): acquireDVFSLockLocked : type : DVFS_MIN_LIMIT  frequency : 1000000  uid : 1000  pid : 2017  tag : ActivityManager
11-01 00:19:27.025: W/ActivityManager(2017): mDVFSLock.acquire()
11-01 00:19:27.045: V/AlarmManager(2017): waitForAlarm result :1
11-01 00:19:27.085: V/AlarmManager(2017): trigger ELAPSED_REALTIME_WAKEUP or RTC_WAKEUP
11-01 00:19:27.085: W/AlarmManager(2017): FACTORY_ON= 0
11-01 00:19:27.095: V/AlarmManager(2017): waitForAlarm result :1
11-01 00:19:27.095: V/AlarmManager(2017): trigger ELAPSED_REALTIME_WAKEUP or RTC_WAKEUP
11-01 00:19:27.135: E/JavaBinder(2017): !!! FAILED BINDER TRANSACTION !!!
11-01 00:19:27.185: W/ActivityManager(2017): Exception when starting activity com.example.ricettenapoli/.lupa
11-01 00:19:27.185: W/ActivityManager(2017): android.os.TransactionTooLargeException
11-01 00:19:27.185: W/ActivityManager(2017):    at android.os.BinderProxy.transact(Native Method)
11-01 00:19:27.185: W/ActivityManager(2017):    at android.app.ApplicationThreadProxy.scheduleLaunchActivity(ApplicationThreadNative.java:731)
11-01 00:19:27.185: W/ActivityManager(2017):    at com.android.server.am.ActivityStack.realStartActivityLocked(ActivityStack.java:713)
11-01 00:19:27.185: W/ActivityManager(2017):    at com.android.server.am.ActivityStack.startSpecificActivityLocked(ActivityStack.java:841)
11-01 00:19:27.185: W/ActivityManager(2017):    at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1799)
11-01 00:19:27.185: W/ActivityManager(2017):    at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1426)
11-01 00:19:27.185: W/ActivityManager(2017):    at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1174)
11-01 00:19:27.185: W/ActivityManager(2017):    at com.android.server.am.ActivityStack.activityPaused(ActivityStack.java:1072)
11-01 00:19:27.185: W/ActivityManager(2017):    at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:4467)
11-01 00:19:27.185: W/ActivityManager(2017):    at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:396)
11-01 00:19:27.185: W/ActivityManager(2017):    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:1695)
11-01 00:19:27.185: W/ActivityManager(2017):    at android.os.Binder.execTransact(Binder.java:367)
11-01 00:19:27.185: W/ActivityManager(2017):    at dalvik.system.NativeStart.run(Native Method)
11-01 00:19:27.195: D/WindowManager(2017): PhoneWindowManager: focusChangedLw

有什么想法吗?


编辑:我的ArrayList<String>太大了,所以我把它存储在一个文件中并加载到另一个活动中。

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试:

intent.putStringArrayListExtra("lista",lista);

在lupa.class活动中,您可以通过以下方式获取此列表:

ArrayList<String> lista = (ArrayList<String>) getIntent().getStringArrayListExtra("lista");