我遇到了一些简单问题。
我正试图通过这样的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>
太大了,所以我把它存储在一个文件中并加载到另一个活动中。
谢谢!
答案 0 :(得分:0)
尝试:
intent.putStringArrayListExtra("lista",lista);
在lupa.class活动中,您可以通过以下方式获取此列表:
ArrayList<String> lista = (ArrayList<String>) getIntent().getStringArrayListExtra("lista");