在我的Android应用程序中,我使用/sdcard/subdirectory
方法在onStop()
中将JSON字符串写入位于Android平板电脑上的JSON文件中。该功能成功执行。
如果我将此结果.json-file
从Android设备复制到我的计算机,并且我在Notepad ++中打开此JSON文件,则JSON无效:它不完整。
这是所述JSON文件的内容:
{... there are about 20 of these elements, I won't list them all for readability...},
{"name":"Marker7","long":2.924128,"lat":51.204594,"warning":"Sharp turn"},
{"name":"Marker8","long":2.9260479999999998,"lat":51.203364,"warning":"Dead end"},
{"name":"Marker9","long":2.926252,"lat":51.203209,"warning":"
正如您所看到的,JSON在warning
的{{1}}部分被截断,使得这个JSON无效。
以下是多么奇怪:我的应用程序也在Marker9
- 方法中读取此文件,如果我打印此JSON,它确实显示正确和完整的JSON!因此,在我的Android应用程序中,我没有遇到任何问题,并且我认为我的写入方法和生成的JSON文件正在按预期工作,因为从读取函数中检索了正确的数据。但是,如果我想复制此JSON并在其他地方使用它,我将没有有效的JSON文件。
这是为什么?这与我的Android设备使用的 ext4 - 文件系统有什么关系吗?
我还注意到,当文件达到 1.18kB 大小标记(如我的资源管理器视图中所示)时,似乎会发生这种情况,但同样:在Android应用中检索到正确且完整的IS .. 。),因为每次我复制文件并且它似乎被切断时,大小总是精确到1.18kB。
阅读JSON的代码:
onCreate()
编写JSON的代码:
public String loadJSON() {
String json = null;
try {
//InputStream is = getAssets().open("markers.json");
File jsonFile = new File(Environment.getExternalStorageDirectory(), "osmdroid/markers.json");
FileInputStream is = new FileInputStream(jsonFile);
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}
private void readJsonMarkers() throws JSONException {
JSONObject obj = new JSONObject(loadJSON());
JSONArray jsonArray = obj.getJSONArray("markers");
System.out.println("JSON LOAD: " + jsonArray); // this shows the correct, full list of markers
}