如何解决Android:在运行时编辑保存在本地存储中的json中的单个功能属性/值
最初,我使用的应用程序不应在内部存储器中创建和复制文件,但是由于资产在运行时不可编辑,因此变得很有必要。但这现在在编辑文件时给了我一个问题。
某些背景:只有这样,我才需要从资产中将文件复制到sdcard/Android/data/com.***.***/files/filname.geojson
-仅在应用程序首次运行时。
private void copyAssets() {
AssetManager assetManager = getAssets();
String[] files = null;
try {
files = assetManager.list("");
} catch (IOException e) {
Log.e("tag","Failed to get asset file list.",e);
}
for(String filename : files) {
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(filename);
File outFile = new File(getExternalFilesDir(null),filename);
out = new FileOutputStream(outFile);
copyFile(in,out);
in.close();
in = null;
out.flush();
out.close();
out = null;
} catch(IOException e) {
Log.e("tag","Failed to copy asset file: " + filename,e);
}
}
}
private void copyFile(InputStream in,OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer,read);
}
}
现在,只需调用以下命令即可读取json本身:
try {
loadedMapStyle.addSource(new GeoJsonSource(GEOJSON_SOURCE_ID,new URI("file:///sdcard/Android/data/com.***.***/files/filename.geojson")));
} catch (URISyntaxException exception) {
Timber.d(exception);
}
现在,当显示数据时,我可以使用以下方法在对话框中检索每个坐标属性:
public boolean onMapClick(@NonNull final LatLng point) {
PointF pointf = mapboxMap.getProjection().toScreenLocation(point);
RectF rectF = new RectF(pointf.x - 20,pointf.y - 20,pointf.x + 20,pointf.y + 20);
List<Feature> featureList = mapboxMap.queryRenderedFeatures(rectF,geoJsonLayerId);
if (featureList.size() > 0) {
for (final Feature feature : featureList) {
Timber.d("Feature found with %1$s",feature.toJson());
runOnUiThread(new Runnable() {
@Override
public void run() {
if
(!isFinishing()){
if(Dialogbusy){
return;
}
Dialogbusy = true;
final JsonObject featureJsonParsing = feature.properties();
String property1 = featureJsonParsing.get("prop1").getAsString();
String property2 = featureJsonParsing.get("prop2").getAsString();
String property3 = featureJsonParsing.get("prop3").getAsString();
boolean property4 = featureJsonParsing.get("prop4").getAsBoolean();
这是我的问题所在: 将prop4编辑为从true更改为false,反之亦然,当然,使更改反映在复制到存储中的json文件中
builder.setPositiveButton("Add to visited",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
feature.properties().addProperty("prop4",true);
}
}); // Changes to 'true'
builder.setNeutralButton("Not Visited",false);
}
}); // Changes to 'false'
这使它在日志中显示为已更改,但实际上并没有更改json文件中的任何内容。我看到我不需要额外的读/写权限,因为文件复制没有任何问题(我当然是错的)
有帮助吗?? =)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。