从json文件读取数据BufferedReader仅返回null

时间:2018-05-14 18:00:03

标签: android json bufferedreader

我目前正在学习安卓系统,其中包括一本名为“#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:为什么上帝为什么

很想听听你的见解。

2 个答案:

答案 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)

尝试检查第二个mFilenametry-catch是否为空,通常在Android实例中很容易消失。

PD:我建议您选择另一个JSON库来操作JSON文件,它们是轻量级的easy-to-use

==编辑==

您是否在AndroidManifest上添加了写作和阅读权限? 如果答案是“那就是”,请尝试逐步调试应用程序,查找变量和变量,以检查值是否存在。

可能是文件没有写自己或者写的是空的。

错误基本上是空字符串或非格式JSON:

""
"[{"a": "abdc", "b": "jef2","

注意BufferedReader,因为它读取每行,你需要所有文件,然后加入字符串变量。

另外,尝试使用AndroidStudio中的android文件浏览器。在那里,您可以浏览文件,日志和数据库文件,并将它们导出到您的特定文件夹(文档,下载等)。通常,应用程序编写的文件存储在data -> <com.your.app.package>中。