最初,我使用的应用程序不应该在内存中创建和复制文件,但是因为在运行时资产是不可编辑的,所以这是必要的。但现在我在编辑文件时遇到了一个问题。
一些背景:有了这个,我需要复制到的文件 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, 0, 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", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
feature.properties().addProperty("prop4",false);
}
}); // Changes to 'false'
这使得它在日志中显示为已更改,但实际上并没有更改json文件中的任何内容。我看到我不需要额外的读/写权限,因为文件拷贝没有任何问题(当然我可能错了)
有什么帮助吗??=)
暂无答案!
目前还没有任何答案,快来回答吧!