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 的默认导航抽屉模板中使用按钮在片段之间切换
片段中的TextView在Android Studio中返回Null