【问题标题】:Mobile map package returns null for map移动地图包为地图返回 null
【发布时间】:2018-02-26 02:32:28
【问题描述】:

我下载了 Arcgis 示例 mmpk 文件,甚至我自己也制作了一个 mmpk。
在这两个文件中,我都有 1 个地图(通过调试检查),但是当我尝试加载地图(在 Esri 指南页面中使用代码)时,它为地图返回 null
可以说我可以在我的地图视图中显示在线地图并且 android studio 没有显示警告或错误。

    import static n.k.masoud.sbmap.R.id.mapView;


    public class ActivityMain extends AppCompatActivity {
        private MapView mMapView;
        private ArcGISMap map;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mMapView = (MapView) findViewById(mapView);

来自主站点的代码和文件

            try {File mmpkFile = new File(Environment.getExternalStorageDirectory(),"devlabs-package.mmpk");
            String mmpkPath = mmpkFile.getAbsolutePath();
            final MobileMapPackage mobileMapPackage=new MobileMapPackage(mmpkPath);


  mobileMapPackage.addDoneLoadingListener(new Runnable() {
       @Override
         public void run() {

这个如果得到false

             if (mobileMapPackage.getLoadStatus() == LoadStatus.LOADED) {
               showMessage(String.format("Number of maps = %d", mobileMapPackage.getMaps().size()));
map = mobileMapPackage.getMaps().get(0);
            } else {
               dealWithLoadFailure();
              }
           }
     });
       mobileMapPackage.loadAsync();
   }
    catch (Exception err){
      Log.e("TAG", "onCreate: "+err);
   }

          map.addDoneLoadingListener(new Runnable() {
              @Override
              public void run() {
                  if (map.getLoadStatus() == LoadStatus.LOADED) {
                     Log.e("TAG", "run: map loaded ok" );
                       // Once map is loaded, can check its properties and content
                    if (map.getBookmarks().size() > 0) {
}
                } else {
dealWithLoadFailure();
                 }
              }
            });
           map.loadAsync();

正如我在下面所说的那样工作正常

 //        for online maps
    //        ArcGISMap map = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 29.453826, 60.852134,12);

            mMapView.setMap(map);
mMapView.addLayerViewStateChangedListener(new LayerViewStateChangedListener() {
                @Override
                public void layerViewStateChanged(LayerViewStateChangedEvent layerViewStateChangedEvent) {
                    // Each layer may have more than one layer view state.
                    StringBuilder layerStatuses = new StringBuilder();
                    for (LayerViewStatus status : layerViewStateChangedEvent.getLayerViewStatus()) {
                        if (layerStatuses.length() > 0) {
                            layerStatuses.append(",");
                        } layerStatuses.append(status.name());
                    }
                    showMessage(String.format("Layer '%s' status=%s", layerViewStateChangedEvent.getLayer().getName(), layerStatuses.toString()));
                } });



        }
        @Override
        protected void onPause(){
            mMapView.pause();
            super.onPause();
        }

        @Override
        protected void onResume(){
            super.onResume();
            mMapView.resume();
        }

    }

【问题讨论】:

    标签: dictionary arcgis arcgis-android-api


    【解决方案1】:

    如果行

    if (mobileMapPackage.getLoadStatus() == LoadStatus.LOADED)
    

    返回 false,则移动地图包未加载且不包含任何地图。

    在您的 dealWithLoadFailure() 函数中,您可以检索加载错误:

    mobileMapPackage.getLoadError()
    

    看看它是什么。它应该告诉您导致加载失败的错误是什么。

    【讨论】:

    • 它说“文件不喜欢”,但在这一步之前我检查 mmpkFile.exist() 并且我得到了真实,那么我如何检查 mobileMapPackage 是否存在?
    • 你猜怎么着?!问题出在我的字符串路径中?
    • 可能是权限问题,你的应用对外部存储目录有读/写权限吗?
    • 是的,我拥有所有 reed/write 权限以及 opengl 2 和基于位置(GPS、精细位置和...)
    【解决方案2】:

    我的一个朋友尝试过这种方法,但没有像我一样得到任何结果。
    于是他把官方指南代码改成了这个,得到了很好的响应。 我认为他的代码来自互联网,所以我不知道它的版权许可。

     private void setupMobileMap() {
        if (mMapView != null) {
            File mmpkFile = new File(Environment.getExternalStorageDirectory(), "devlabs-package.mmpk");
            final MobileMapPackage mapPackage = new MobileMapPackage(mmpkFile.getAbsolutePath());
            mapPackage.addDoneLoadingListener(new Runnable() {
                @Override
                public void run() {
                    // Verify the file loaded and there is at least one map
                    if (mapPackage.getLoadStatus() == LoadStatus.LOADED && mapPackage.getMaps().size() > 0) {
                         mMapView.setMap(mapPackage.getMaps().get(0));
                    } else {
                        // Error if the mobile map package fails to load or there are no maps included in the package
                        //setupMap();
                        //Log for Error
                    }
                }
            });
            mapPackage.loadAsync();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2016-03-23
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      相关资源
      最近更新 更多