Android Studio - 在片段之间更改时底部导航崩溃

Posted

技术标签:

【中文标题】Android Studio - 在片段之间更改时底部导航崩溃【英文标题】:Android Studio - Bottom navigation crash when changing between fragments 【发布时间】:2017-07-07 00:32:23 【问题描述】:

我正在创建应用程序,到目前为止一切都很好。今天我正在处理片段中的数据以到达我的 web 服务并返回 json,然后将该数据插入我的 sqlite,然后在列表视图中显示它并逐秒更新数据。

一切都是正确的,直到我发现如果我在片段中的项目所在的底部导航中单击太快,它会在片段上执行事务时使应用程序崩溃。仅当我在该片段和其他 4 个片段中的多个 1 个之间单击时才会发生。

所以我的问题是,无论如何我可以处理这个问题吗?就像我从底部导航中单击另一个项目一样,最后一个项目的过渡会停止吗?如果有怎么办?

【问题讨论】:

你能发布你的代码吗? 你能发布你的堆栈跟踪吗? 我建议您在活动上使用加载器,并且在加载数据之前不要关闭它。这将防止任何人在加载数据时切换选项卡。希望这会有所帮助。 【参考方案1】:

据我所知(信息很少),问题很可能是片段被破坏(当代码逻辑试图连接到服务器并将 json 数据返回到应用程序时),而你'重新尝试访问被破坏的片段元素(或项目,在本例中为列表视图,以使用接收到的数据填充它)。

在你的每一个片段中,在接收到 json 数据之后,在做任何其他事情之前,检查片段是否仍然可见并附加到活动,并且活动没有被破坏。

// Check the activity is not destroyed and the 
// fragment is still connected to the activity
if (getActivity() != null && isAdded()) 
    // Parse the JSON data
    // Write to your SQL database
    // Load the data into the list view

【讨论】:

问题是,如果在片段中写入获取 json 的连接,则该解决方案将起作用,但在片段中,我唯一拥有的是设置 ListView R.id,为listview 然后运行 ​​db 将值插入到 listview 中。之后在 CustomAdapter 中运行一些函数,每个函数都建立一个连接以更新项目中的项目值。我将使用代码编辑我的帖子 您也可以发布堆栈跟踪吗? 已经发布了一个打印屏幕。应用程序崩溃后 1 秒跟踪变得干净 您的应用正在抛出 NegativeArraySizeException。放置日志语句并检查ticketsObject 或任何其他arraylist 大小是否为负数。由于图像中只有 6 行崩溃数据可见,因此无法判断崩溃发生在哪个文件和哪一行。 Logcat 消失 - ***.com/questions/16817566/… NegativeArraySizeException - groups.google.com/forum/#!topic/volley-users/0W-oI6za8VY【参考方案2】:

我发现 'compile 'com.android.volley:volley:1.0.0'' 版本的 volley 有这个错误,并且 google(或制作 volley 的人)从那时起就没有在 google 库中更新 volley。

解决此问题的方法是使用非官方版本: '编译'com.mcxiaoke.volley:library:1.0.19''

这个版本已经纠正了这个来自凌空的“错误”。 对于未来,如果有人想了解更多关于这方面的信息,请访问 mcxiaoke 的链接: https://github.com/mcxiaoke/android-volley

以及如何使用它的链接: https://www.thorntech.com/2016/03/parsing-json-android-using-volley-library/

【讨论】:

以上是关于Android Studio - 在片段之间更改时底部导航崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行时在由 android studio 创建的导航抽屉中设置默认片段

通过片段之间的导航传递数据android studio

在 Android Studio 的默认导航抽屉模板中使用按钮在片段之间切换

片段中的TextView在Android Studio中返回Null

在 NavigationUI、Android Studio 中停止页面刷新

更改组件可见性时 Android Studio 空对象引用错误