我目前正在学习安卓系统,其中包括一本名为“#34; Android编程 - 大书呆子牧场指南"”的书籍。 作为学习项目的一部分,我们创建了用于保存和加载数据的Json序列化程序。写文件显然工作正常,我没有在Logcat上收到任何错误消息。在我终止应用程序并重新创建它之后,调用数据加载器并引发以下异常:
org.json.JSONException:字符0的输入结束
我已经在网上查找了这个问题并认为可能是因为BufferedReader返回空响应。我已经检查过,事实确实如此。 为简单起见,我暂时将BufferedReader放入保存功能并尝试读取我刚刚保存到文件中的信息,而BufferedReader仍然只返回null。
public void saveCrimes(ArrayList<Crime>crimes)
throws JSONException, IOException {
JSONArray array = new JSONArray();
for(Crime c: crimes)
array.put(c.toJSON());
Writer writer = null;
try {
OutputStream out = mContext.openFileOutput(mFileName, Context.MODE_PRIVATE);
writer = new OutputStreamWriter(out);
writer.write(array.toString());
Log.d(TAG, array.toString());
} finally {
if(writer == null)
writer.close();
}
// Extracting the data
BufferedReader bufferedReader = null;
try {
InputStream inputStream = mContext.openFileInput(mFileName);
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
if (bufferedReader.readLine() == null)
Log.d(TAG, "WHY GOD WHYYYYYYY");
}catch (IOException e){
}
}
(来自代码的两条日志消息,第一条显示JsonArray中使用的数据)
D / CriminalIntentJSONSerializer:[{&#34; date&#34;:&#34; Mon 5月14日17:33:08 GMT + 00:00 2018&#34;,&#34; id&#34;:& #34; 97fe9532-991f-4352-9de1-602fa8dfa93e&#34;&#34;溶解情况&#34;:真,&#34;标题&#34;:&#34;&#34;}] D / CriminalIntentJSONSerializer:为什么上帝为什么
很想听听你的见解。
答案 0 :(得分:0)
BufferedReader bufferedReader = null;
try {
InputStream inputStream = mContext.openFileInput(mFileName);
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
if (bufferedReader.readLine() == null)
Log.d(TAG, "WHY GOD WHYYYYYYY");
}catch (IOException e){
}
确定。您已经创建了BufferedReader bufferedReader = null;
当你说bufferedReader = new BufferedReader(anything)
时会发生什么......嗯......它不能把新实例称为已经宣布的事情......事实上,它已经是被实例化为null。因此,您无法创建同名的新实例。
尝试删除您将其指向null的行。然后,替换
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
对于try
块中的原始声明
答案 1 :(得分:0)
尝试检查第二个mFilename
上try-catch
是否为空,通常在Android实例中很容易消失。
PD:我建议您选择另一个JSON库来操作JSON文件,它们是轻量级的easy-to-use
。
==编辑==
您是否在AndroidManifest上添加了写作和阅读权限? 如果答案是“那就是”,请尝试逐步调试应用程序,查找变量和变量,以检查值是否存在。
可能是文件没有写自己或者写的是空的。
错误基本上是空字符串或非格式JSON:
""
"[{"a": "abdc", "b": "jef2","
注意BufferedReader,因为它读取每行,你需要所有文件,然后加入字符串变量。
另外,尝试使用AndroidStudio中的android文件浏览器。在那里,您可以浏览文件,日志和数据库文件,并将它们导出到您的特定文件夹(文档,下载等)。通常,应用程序编写的文件存储在data -> <com.your.app.package>
中。