以编程方式添加MapBox

时间:2015-04-13 13:51:11

标签: android-fragments mapbox programmatically-created

我试图以编程方式添加地图,作为片段。不幸的是,我没有取得多大成功。我还试图从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

1 个答案:

答案 0 :(得分:0)

基于堆栈跟踪,如果看起来问题是在运行时无法在类路径上找到lisbon.geojson。它位于src/main/assets目录吗?