2015-04-13 4 views
0

Я пытаюсь добавить карту программно, как фрагмент. К сожалению, у меня не было большого успеха. Я не знаю, что я делаю неправильно здесь. Я также пытаюсь добавить маркеры из файла GeoJSTON, который хранится локально. Любая помощь будет принята с благодарностью!добавление MapBox программно

Следующая моя основная деятельность:

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

И 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

на основе трассировки стека, если выглядит как вопрос в том, что lisbon.geojson не может быть найден на пути к классам во время выполнения. Он расположен в каталоге src/main/assets?

+0

Благодарим вас за то, что вы потратили некоторое время на ответ. Фактически, lisbon.geojson не был в нужном месте, когда я изначально разместил этот вопрос, но теперь он находится в каталоге активов. Тем не менее, все, что я получаю, это пустой пользовательский интерфейс с обратной кнопкой внизу. – pierrebonbon

+0

Возможно, вы захотите использовать 'FrameLayout' вместо' LinearLayout' для '@ + id/FragmentContainer' –

+0

Пока что к сожалению нет. Я обновил журнал ошибок/предупреждений выше, возможно, это помогает найти проблему. – pierrebonbon