2015-07-13 104 views
1

我遇到了令人沮丧的问题。 我有一个列表,它有一个适配器。 我的适配器有一个ArrayList,它保存对ImageViews的引用。无法恢复活动IndexOutOfBoundsException:索引0无效,大小为0

我的一个片段中有一个用户可以从设备目录中选择文件的功能。然后,onActivityResult会根据索引将返回的位图的缩略图设置为imageView。 所以从片段我打电话像adapter.getImageView(pos).setBitmap(bm)。

问题:当用户浏览图片库一段时间并最终选择时,我的应用程序崩溃,出现错误无法恢复活动,因为索引超出了我的onActivityResult范围,因为它调用了getImageView(pos )

我认为发生的事情是,当用户浏览时间过长时,操作系统会回收我的应用程序并将其销毁,然后在用户返回时尝试重新创建它。奇怪的是,我的适配器不是空的,只是ArrayList未初始化。 另一个奇怪的事情是我尝试调试并将Log.v放入该片段的onResume()以及onActivityResult中。 在这两种情况下,它似乎甚至没有进入那些崩溃之前的方法。我很困惑...请帮助。

这里充满例外

java.lang.RuntimeException: Unable to resume activity {com.core.somepackage/com.core.somepackage.SomeActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=67536, result=-1, data=Intent { dat=content://media/external/images/media/33276 flg=0x1 }} to activity {com.core.somepackage/com.core.somepackage.SomeActivity}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
      at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2742) 
      at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235) 
      at android.app.ActivityThread.access$600(ActivityThread.java:141) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:5039) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=67536, result=-1, data=Intent { dat=content://media/external/images/media/33276 flg=0x1 }} to activity {com.core.somepackage/com.core.somepackage.SomeActivity}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
      at android.app.ActivityThread.deliverResults(ActivityThread.java:3319) 
      at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2729) 
            at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235) 
            at android.app.ActivityThread.access$600(ActivityThread.java:141) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:5039) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
      at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
      at java.util.ArrayList.get(ArrayList.java:304) 
      at com.core.local.utils.adapters.UploadRecyclerViewAdapter.getImageView(UploadRecyclerViewAdapter.java:108) 
      at com.core.main.UploadImageScreen.onActivityResult(UploadImageScreen.java:246) 
      at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:165) 
      at android.app.Activity.dispatchActivityResult(Activity.java:5293) 
      at android.app.ActivityThread.deliverResults(ActivityThread.java:3315) 
            at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2729) 
            at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235) 
            at android.app.ActivityThread.access$600(ActivityThread.java:141) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:5039) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
            at dalvik.system.NativeStart.main(Native Method) 
+0

这个错误意味着你的数组列表中没有数值。但在应用程序的某个时刻,您正在使用索引调用其中一个值。如果你浏览短时间>会发生什么? – Sheychan

+0

如果在短时间浏览一切都很好。这种情况随机发生时,我认为OS释放记忆 – vankiz

回答

0

我之前见过类似的问题,你可以尝试onRestoreInstanceState的onSaveInstanceState和在method.In的onSaveInstanceState,可以节省 您的数据;在onSaveInstanceState方法中,您可以获取之前保存的数据。

protected void onSaveInstanceState(Bundle outState) { 
    outState.putInt("param", param); 
    super.onSaveInstanceState(outState); 
} 

protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    param = savedInstanceState.getInt("param"); 
    super.onRestoreInstanceState(savedInstanceState); 
} 

这两种方法above.In我的测试,onRestoreInstanceState被调用之前的onResume method.You可以试试这些方法,我希望这会有所帮助。

+0

感谢您的建议。我有计划创建恢复实例状态。没想到这会发生。明天会试试看。这样做后会在这里发布。 – vankiz

+0

@vankiz是否解决了您的问题? – Sufian

相关问题