在Android上使用带有ArcGIS的ShapefileFeatureTable时,找不到文件异常

时间:2016-12-21 11:36:24

标签: android arcgis arcgis-android-api

我正在尝试使用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;
}

这里的问题是形状文件实际存在于SD卡上。我调试了代码并到达了抛出异常的部分:

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
    }
}

当java部分完全看到它时,原生nativeOpenShapefile似乎无法看到该文件。检查堆栈跟踪:

  

D / dalvikvm:尝试加载lib   /data/data/com.hmomeni.arcgis/lib/libruntimecore_java.so 0x4163daf0   D / dalvikvm:添加了共享库   /data/data/com.hmomeni.arcgis/lib/libruntimecore_java.so 0x4163daf0   W / System.err:java.lang.RuntimeException:找不到Shape文件:   /storage/sdcard0/shape.shp W / System.err:at   com.esri.core.geodatabase.Geodatabase.nativeOpenShapefile(母语   方法)W / System.err:at   com.esri.core.geodatabase.Geodatabase.a(SourceFile:126)W / System.err:   在   。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:
  在   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.access $ 600(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:
  在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   方法)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)

我想知道可能是什么问题?

2 个答案:

答案 0 :(得分:1)

在AndroidManifest.xml中,您是否请求读取和/或写入外部存储的权限?

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

尝试其中每一项,看看它是否有帮助。请参阅the ArcGIS Runtime documentation并阅读&#34;所需权限和功能&#34;详情。

答案 1 :(得分:1)

问题原因是我没有包含.shp文件附带的所有必要文件。为此目的还需要其他文件,例如.shx.dbf.prj 包括它们都解决了这个问题。