You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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展示的内容完全相同,就算先后展示也容易被误认为只显示了一次。

修复方案

  1. 先检查R.string.txturljson的内容,确认是否是合法的JSON数组格式(必须以[开头、]结尾,内部元素符合JSON语法要求)。
  2. 修正代码的大括号结构,同时把字符串比较的==替换为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();
    }
}
  1. 开发排查问题更推荐使用Logcat打印日志,不需要依赖UI展示,还能保留完整的异常栈信息,排查效率远高于Toast。

内容的提问来源于stack exchange,提问作者josewe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:18:01