2012-06-18 2 views
0

Я пытаюсь попробовать приложение HelloWorld с помощью ArcGIS с Android SDK. Код компилируется отлично, но при выполнении выполняется серый экран. Я взглянул на этот question, но это не решает мою проблему.Серый экран MapView - ArcGIS с Android

Вот мой исходный код:

public class HelloWorld extends Activity { 

    MapView map = null; 
    ArcGISTiledMapServiceLayer tileLayer; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     map = (MapView) findViewById(R.id.map); 
     tileLayer = new ArcGISTiledMapServiceLayer("http://services.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer"); 
     if(tileLayer.isInitialized() == true) //if a bad url is provided, this will fail 
     { map.addLayer(tileLayer); } 
     else{ 
       //if no layer is successfully added, the MapView will not initialize 
      Toast layerToast = Toast.makeText(this, "Layer didn't load, MapView won't initialize", Toast.LENGTH_LONG); 
      layerToast.show(); 
     } 

     map.setOnStatusChangedListener(new OnStatusChangedListener() { 
      private static final long serialVersionUID = 1L; 

      public void onStatusChanged(Object source, STATUS status) { 
       //conditional checks if mapView's status has changed to initialized 
       if (OnStatusChangedListener.STATUS.INITIALIZED == status && source == map) 
       { 
        Toast mapViewToast = Toast.makeText(HelloWorld.this, "MapView loaded", Toast.LENGTH_LONG); 
        mapViewToast.show(); 
       } 
      } 
     }); 

    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     map.pause(); 
} 
    @Override protected void onResume() { 
     super.onResume(); 
     map.unpause(); 
    } 

} 

Вот мой LogCat:

06-18 10:51:21.413: E/ArcGIS(1544): url =http://services.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer 
06-18 10:51:21.413: E/ArcGIS(1544): org.codehaus.jackson.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
06-18 10:51:21.413: E/ArcGIS(1544): at [Source: [email protected]; line: 1, column: 2] 
06-18 10:51:21.413: E/ArcGIS(1544):  at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1432) 
06-18 10:51:21.413: E/ArcGIS(1544):  at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:521) 
06-18 10:51:21.413: E/ArcGIS(1544):  at org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:442) 
06-18 10:51:21.413: E/ArcGIS(1544):  at org.codehaus.jackson.impl.ReaderBasedParser._handleUnexpectedValue(ReaderBasedParser.java:1198) 
06-18 10:51:21.413: E/ArcGIS(1544):  at org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.java:485) 
06-18 10:51:21.413: E/ArcGIS(1544):  at com.esri.core.internal.b.a.e.a(Unknown Source) 
06-18 10:51:21.413: E/ArcGIS(1544):  at com.esri.core.internal.b.a.e.a(Unknown Source) 
06-18 10:51:21.413: E/ArcGIS(1544):  at com.esri.core.internal.b.a.e.a(Unknown Source) 
06-18 10:51:21.413: E/ArcGIS(1544):  at com.esri.core.internal.a.a.m.b(Unknown Source) 
06-18 10:51:21.413: E/ArcGIS(1544):  at com.esri.android.map.ags.ArcGISTiledMapServiceLayer.initLayer(Unknown Source) 
06-18 10:51:21.413: E/ArcGIS(1544):  at com.esri.android.map.ags.ArcGISTiledMapServiceLayer$1.run(Unknown Source) 
06-18 10:51:21.413: E/ArcGIS(1544):  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:444) 
06-18 10:51:21.413: E/ArcGIS(1544):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
06-18 10:51:21.413: E/ArcGIS(1544):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
06-18 10:51:21.413: E/ArcGIS(1544):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
06-18 10:51:21.413: E/ArcGIS(1544):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
06-18 10:51:21.413: E/ArcGIS(1544):  at java.lang.Thread.run(Thread.java:1019) 
+0

Можете ли вы вставить источник своего приложения HelloWorld? –

+0

Отправленный здесь. Он немного отличается от исходного кода HelloWorld, предоставленного ArcGIS SDK, но я попытался попробовать код из упомянутого вопроса. –

ответ

2

Вы не можете проверить возвращаемое значение tileLayer IsInitialized сразу же, как это. Инициализация слоя выполняет сетевые вызовы и выполняется асинхронно.

Необходимо сначала добавить его в свой MapView, как в исходном примере кода HelloWorld. Это начнет инициализировать слой. Затем вы можете проверить события, запущенные с вашего OnStatusChangedListener для инициализации слоя и/или карты.

+0

Я получаю ту же ошибку после изменения кода и из того, что я могу сказать из LogCat, я могу получить неожиданное возвращение из URL. Однако я не уверен, что это результат ошибки при вводе URL-адреса или если что-то происходит с сервером ArcGIS, который я запрашиваю. –

+0

Я все еще получаю такую ​​же ошибку в любой помощи об этом? – Tony

0

Если вам не нужно проверять инициализацию слоя по определенной причине, то добавьте его в MapView без использования isInitialized().

Если вам нужно проверить, что слой инициализирован до его продолжения, вы можете использовать OnStatusChangedListener, как с MapView. Затем вы можете подождать, пока статус слоя не изменится на INITIALIZED, а затем добавит его в MapView.

Смежные вопросы