Android Studio Java从字符串创建JSONArray仅显示1个Toast问题
问题原因
- 最常见的原因是
R.string.txturljson对应的字符串不符合JSONArray格式规范,执行new JSONArray(getString(R.string.txturljson))时直接抛出JSONException,代码跳出try块,第二个Toast的show()方法根本没有被执行。 - 你贴出的代码存在结构错误:try块结束后多了一个多余的闭合大括号,导致
catch块和try块失去关联,JSONException抛出后属于未捕获异常,会直接触发应用崩溃,自然不会执行后续的Toast展示逻辑。 - 即使两个Toast的
show()都正常调用,Android系统的Toast是按队列串行展示的,需要等第一个时长为3.5秒的LENGTH_LONGToast完全消失后才会展示第二个,不会同时出现两个Toast;且你当前两个Toast展示的内容完全相同,就算先后展示也容易被误认为只显示了一次。
修复方案
- 先检查
R.string.txturljson的内容,确认是否是合法的JSON数组格式(必须以[开头、]结尾,内部元素符合JSON语法要求)。 - 修正代码的大括号结构,同时把字符串比较的
==替换为equals,避免空指针和字符串比较逻辑错误,参考修正代码如下:
// 字符串常量写在前避免shpref_url为空时触发空指针 if ("no URL defined".equals(shpref_url)) { Toast toast2 = Toast.makeText(getApplicationContext(), getString(R.string.txturljson), Toast.LENGTH_LONG); toast2.show(); try { JSONArray txturljson = new JSONArray(getString(R.string.txturljson)); // 建议更换不同的Toast内容方便区分两个提示 Toast toast = Toast.makeText(getApplicationContext(), "JSON解析成功", Toast.LENGTH_LONG); toast.show(); } catch (JSONException e) { e.printStackTrace(); // 异常时也可以加个Toast提示方便排查 Toast.makeText(getApplicationContext(), "解析失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); } }
- 开发排查问题更推荐使用Logcat打印日志,不需要依赖UI展示,还能保留完整的异常栈信息,排查效率远高于Toast。
内容的提问来源于stack exchange,提问作者josewe
相关产品推荐
相关产品推荐

