Android写入JSON文件报错:Expected literal value at character 0
问题原因
错误的核心是你直接将文件路径字符串传给了JSONArray的构造函数,而JSONArray的构造函数需要的是合法的JSON格式字符串,不是文件路径。它会把路径/storage/emulated/0/Json/Prueba.json当成JSON内容解析,这显然不符合JSON数组的格式,所以抛出了Expected literal value的异常。
解决方案
你需要先读取JSON文件中的内容,将其转换为字符串后再解析成JSONArray;如果文件不存在,则初始化一个空的JSONArray。最后将修改后的JSONArray写回文件。
修改后的代码示例
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; String ruta2 = "/storage/emulated/0/Json/Prueba.json"; k1 = edittext1.getText().toString(); k2 = edittext2.getText().toString(); k3 = edittext3.getText().toString(); try { File jsonFile = new File(ruta2); JSONArray arreglo; // 检查文件是否存在,存在则读取内容解析为JSONArray if (jsonFile.exists()) { FileInputStream fis = new FileInputStream(jsonFile); InputStreamReader isr = new InputStreamReader(fis); char[] buffer = new char[(int) jsonFile.length()]; isr.read(buffer); isr.close(); fis.close(); String jsonContent = new String(buffer); arreglo = new JSONArray(jsonContent); } else { // 文件不存在则创建空的JSONArray,同时确保父目录存在 jsonFile.getParentFile().mkdirs(); arreglo = new JSONArray(); } // 添加新的JSONObject JSONObject objeto = new JSONObject(); objeto.put("K1", k1); objeto.put("K2", k2); objeto.put("K3", k3); arreglo.put(objeto); // 将修改后的JSONArray写回文件 FileOutputStream fos = new FileOutputStream(jsonFile); OutputStreamWriter osw = new OutputStreamWriter(fos); osw.write(arreglo.toString()); osw.flush(); osw.close(); fos.close(); Toast.makeText(getApplicationContext(), "记录添加成功", Toast.LENGTH_LONG).show(); } catch (JSONException | IOException e) { Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); e.printStackTrace(); }
额外注意事项
- 动态权限申请:如果你的应用目标SDK是23及以上,除了在Manifest中声明权限,还需要在代码中动态申请
READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,否则会出现权限被拒绝的情况。 - 存储访问限制:Android 10及以上推荐使用MediaStore或Storage Access Framework来访问外部存储,直接使用路径可能会遇到访问限制,你可以根据目标版本调整存储访问方式。
内容的提问来源于stack exchange,提问作者Yeused Ildebrando Bocanegra Ga
相关产品推荐
相关产品推荐

