[英]Grey Screen MapView - ArcGIS with Android
我正在使用帶有Android SDK的ArcGIS嘗試示例HelloWorld應用程序。 代碼編譯得很好,但執行時會出現灰色屏幕。 我已經看過這個問題,但它並沒有解決我的問題。
這是我的源代碼:
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: java.io.StringReader@4057ed68; 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)
您無法立即檢查tileLayer isInitialized返回值。 層初始化進行網絡調用,並以異步方式完成。
您需要先將它添加到MapView中,就像在原始的HelloWorld示例代碼中一樣。 這將開始初始化圖層。 然后,您可以檢查從OnStatusChangedListener觸發的事件以進行圖層和/或地圖初始化。
如果您不需要為特定原因檢查圖層初始化,則在不使用isInitialized()的情況下將其添加到MapView。
如果確實需要在繼續之前檢查圖層是否已初始化,那么可以像使用MapView一樣使用OnStatusChangedListener。 然后,您可以等到圖層的狀態更改為INITIALIZED,然后將其添加到MapView。
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");
tileLayer.setOnStatusChangedListener(new OnStatusChangedListener() {
public void onStatusChanged(Object source, STATUS status) {
if (OnStatusChangedListener.STATUS.INITIALIZED == status){
map.addLayer(tileLayer); //when layer is initialized add to map
}
}
});
map.setOnStatusChangedListener(new OnStatusChangedListener() {
public void onStatusChanged(Object source, STATUS status) {
if (OnStatusChangedListener.STATUS.INITIALIZED == status )
{ /*do something when mapView is initialized*/ }
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.