在 Android 上将 ShapefileFeatureTable 与 ArcGIS 一起使用时出现文件未找到异常
File not found exception when using ShapefileFeatureTable with ArcGIS on Android
我正在尝试使用 ArcGIS
在地图上使用其 ShapefileFeatureTable
绘制一些形状文件。但是当我尝试加载形状文件时,我得到一个 File not found
异常。
这是我正在使用的代码:
ShapefileFeatureTable shapefileFeatureTable;
try {
shapefileFeatureTable = new ShapefileFeatureTable(Environment.getExternalStorageDirectory().getAbsolutePath() + "/shape.shp");
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "loading shape failed", Toast.LENGTH_SHORT).show();
return;
}
这里的问题是形状文件实际上存在于 sdcard 上。我调试了代码并到达了抛出异常的这一部分:
static Geodatabase a(String var0) throws FileNotFoundException {
File var1 = new File(var0);
if(!var1.exists()) {
throw new FileNotFoundException(var1 + " does not exist.");
} else {
return new Geodatabase(nativeOpenShapefile(var0)); // this is where it happens
}
}
本机 nativeOpenShapefile
似乎无法看到该文件,而 java 部分可以完美地看到它。检查堆栈跟踪:
D/dalvikvm: Trying to load lib
/data/data/com.hmomeni.arcgis/lib/libruntimecore_java.so 0x4163daf0
D/dalvikvm: Added shared lib
/data/data/com.hmomeni.arcgis/lib/libruntimecore_java.so 0x4163daf0
W/System.err: java.lang.RuntimeException: Shape file not found:
/storage/sdcard0/shape.shp W/System.err: at
com.esri.core.geodatabase.Geodatabase.nativeOpenShapefile(Native
Method) W/System.err: at
com.esri.core.geodatabase.Geodatabase.a(SourceFile:126) W/System.err:
at
com.esri.core.geodatabase.ShapefileFeatureTable.(SourceFile:79)
W/System.err: at
com.hmomeni.arcgis.MainActivity.initView(MainActivity.java:32)
W/System.err: at
com.hmomeni.arcgis.MainActivity.onCreate(MainActivity.java:21)
W/System.err: at
android.app.Activity.performCreate(Activity.java:5031) W/System.err:
at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
W/System.err: at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2038)
W/System.err: at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2099)
W/System.err: at
android.app.ActivityThread.access0(ActivityThread.java:134)
W/System.err: at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1207)
W/System.err: at
android.os.Handler.dispatchMessage(Handler.java:99) W/System.err:
at android.os.Looper.loop(Looper.java:137) W/System.err: at
android.app.ActivityThread.main(ActivityThread.java:4797)
W/System.err: at java.lang.reflect.Method.invokeNative(Native
Method) W/System.err: at
java.lang.reflect.Method.invoke(Method.java:511) W/System.err: at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:776)
W/System.err: at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:543)
W/System.err: at dalvik.system.NativeStart.main(Native Method)
我想知道可能是什么问题?
在 AndroidManifest.xml 中,您是否请求读取 and/or 写入外部存储的权限?
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
或
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
尝试每一个,看看是否有帮助。有关详细信息,请参阅 the ArcGIS Runtime documentation 并阅读 "Required permissions and features" 部分。
问题原来是我没有包含 .shp
文件附带的所有必要文件。为此还需要其他文件,例如 .shx
、.dbf
、.prj
.
包括它们都解决了问题。
我正在尝试使用 ArcGIS
在地图上使用其 ShapefileFeatureTable
绘制一些形状文件。但是当我尝试加载形状文件时,我得到一个 File not found
异常。
这是我正在使用的代码:
ShapefileFeatureTable shapefileFeatureTable;
try {
shapefileFeatureTable = new ShapefileFeatureTable(Environment.getExternalStorageDirectory().getAbsolutePath() + "/shape.shp");
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "loading shape failed", Toast.LENGTH_SHORT).show();
return;
}
这里的问题是形状文件实际上存在于 sdcard 上。我调试了代码并到达了抛出异常的这一部分:
static Geodatabase a(String var0) throws FileNotFoundException {
File var1 = new File(var0);
if(!var1.exists()) {
throw new FileNotFoundException(var1 + " does not exist.");
} else {
return new Geodatabase(nativeOpenShapefile(var0)); // this is where it happens
}
}
本机 nativeOpenShapefile
似乎无法看到该文件,而 java 部分可以完美地看到它。检查堆栈跟踪:
D/dalvikvm: Trying to load lib /data/data/com.hmomeni.arcgis/lib/libruntimecore_java.so 0x4163daf0 D/dalvikvm: Added shared lib /data/data/com.hmomeni.arcgis/lib/libruntimecore_java.so 0x4163daf0 W/System.err: java.lang.RuntimeException: Shape file not found: /storage/sdcard0/shape.shp W/System.err: at com.esri.core.geodatabase.Geodatabase.nativeOpenShapefile(Native Method) W/System.err: at com.esri.core.geodatabase.Geodatabase.a(SourceFile:126) W/System.err: at com.esri.core.geodatabase.ShapefileFeatureTable.(SourceFile:79) W/System.err: at com.hmomeni.arcgis.MainActivity.initView(MainActivity.java:32) W/System.err: at com.hmomeni.arcgis.MainActivity.onCreate(MainActivity.java:21) W/System.err: at android.app.Activity.performCreate(Activity.java:5031) W/System.err:
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082) W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2038) W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2099) W/System.err: at android.app.ActivityThread.access0(ActivityThread.java:134) W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1207) W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99) W/System.err:
at android.os.Looper.loop(Looper.java:137) W/System.err: at android.app.ActivityThread.main(ActivityThread.java:4797) W/System.err: at java.lang.reflect.Method.invokeNative(Native Method) W/System.err: at java.lang.reflect.Method.invoke(Method.java:511) W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:776) W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:543) W/System.err: at dalvik.system.NativeStart.main(Native Method)
我想知道可能是什么问题?
在 AndroidManifest.xml 中,您是否请求读取 and/or 写入外部存储的权限?
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
或
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
尝试每一个,看看是否有帮助。有关详细信息,请参阅 the ArcGIS Runtime documentation 并阅读 "Required permissions and features" 部分。
问题原来是我没有包含 .shp
文件附带的所有必要文件。为此还需要其他文件,例如 .shx
、.dbf
、.prj
.
包括它们都解决了问题。