代码之家  ›  专栏  ›  技术社区  ›  user7241242

移动地图包为地图返回null

  •  0
  • user7241242  · 技术社区  · 7 年前

    我下载了 Arcgis 样品 mmpk 甚至我自己做了一个mmpk。
    在这两个文件中,我都有一个映射(由调试检查),但当我尝试加载映射时(带有代码 指南页)返回 用于地图。
    很高兴地说,我可以在地图视图中显示在线地图,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() {
    

    如果 得到

                 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();
            }
    
        }
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   falldownhill    7 年前

    如果线路

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

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

    mobileMapPackage.getLoadError()
    

    看看是什么。它应该告诉您导致负载故障的错误是什么。

        2
  •  0
  •   user7241242 user7241242    7 年前

    我的一个朋友尝试了这种方法,但没有得到任何结果,就像我一样。
    所以他把官方的指南代码改成了这个,并得到了很好的回应。

     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();
        }
    }