Пакет мобильной карты возвращает ноль для карты

Я скачал образец mmpk файла Arcgis и даже сам сделал mmpk.
В обоих файлах у меня есть 1 карта (проверено отладкой), но когда я пытаюсь загрузить карту (с кодами на странице руководства Esri), она возвращает нуль для карты.
Хорошо бы сказать, что я могу показать онлайн карту в моем виде карты, и 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 ответа

Решение

Один из моих друзей попробовал это сделать, но не получил никакого результата, как я.
Поэтому он изменил официальный код руководства и получил хороший ответ. Я думаю, что он получил код из Интернета, поэтому я не знаю о его авторских правах.

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

Если линия

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

возвращает false, тогда пакет мобильной карты не загружен и не будет содержать никаких карт.

В вашей функции dealWithLoadFailure() вы можете получить ошибку загрузки:

mobileMapPackage.getLoadError()

и посмотрим, что это. Он должен сказать вам, что ошибка вызывает сбой загрузки.

Другие вопросы по тегам