我试图以编程方式添加地图,作为片段。不幸的是,我没有取得多大成功。我还试图从GeoJSTON文件添加标记,该文件存储在本地。
以下是我的主要活动:
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// get an instance of FragmentTransaction from your Activity
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//add a fragment
MapActivity myFragment = new MapActivity();
fragmentTransaction.add(R.id.FragmentContainer, myFragment);
fragmentTransaction.commit();
}
这里是主要活动的XML:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/MainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/FragmentContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
</FrameLayout>
</LinearLayout>
这是MapActivity类:
public class MapActivity extends Fragment {
private MapView mv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_map, container, false);
// Setup Map
mv = (MapView) view.findViewById(R.id.mapview);
mv.setCenter(new LatLng(-9.133248925209045,38.70980094773454));
mv.setZoom(14);
return view;
}
@Override
public void onResume() {
super.onResume();
try {
FeatureCollection features = DataLoadingUtils.loadGeoJSONFromAssets(getActivity(), "lisbon.geojson");
ArrayList<Object> uiObjects = DataLoadingUtils.createUIObjectsFromGeoJSONObjects(features, null);
for (Object obj : uiObjects) {
if (obj instanceof Marker) {
mv.addMarker((Marker) obj);
} else if (obj instanceof PathOverlay) {
mv.getOverlays().add((PathOverlay) obj);
}
}
if (uiObjects.size() > 0) {
mv.invalidate();
}
} catch (Exception e) {
e.printStackTrace();
}
}
Map活动的XML:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mapbox="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mapbox.mapboxsdk.views.MapView
android:id="@+id/mapview"
android:layout_height="match_parent"
android:layout_width="match_parent"
mapbox:mapid="@string/mapLisbon"
mapbox:accessToken="@string/testAccessToken"/>
</FrameLayout>
警告/错误日志:
W/System.err at com.mapbox.mapboxsdk.tileprovider.tilesource.TileJsonTileLayer$RetrieveJSONTask.doInBackground(TileJsonTileLayer.java:162)
W/System.err﹕ at com.mapbox.mapboxsdk.tileprovider.tilesource.TileJsonTileLayer$RetrieveJSONTask.doInBackground(TileJsonTileLayer.java:156)
W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
W/System.err﹕ Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
W/System.err﹕ at libcore.io.Posix.getaddrinfo(Native Method)
W/System.err﹕ at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61)
W/System.err﹕ at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
W/System.err﹕ ... 22 more
W/ViewRootImpl﹕ mView has no focus, use com.android.internal.policy.impl.PhoneWindow$DecorView{427aef70 V.E..... R.....ID 0,0-1080,1668} instead
答案 0 :(得分:0)
基于堆栈跟踪,如果看起来问题是在运行时无法在类路径上找到lisbon.geojson。它位于src/main/assets
目录吗?