Android: создание MapView на Asynctask не работает - PullRequest
0 голосов
/ 25 августа 2011

Я пытаюсь создать MapView в другом потоке, так как загрузка Activity занимает слишком много времени.

class MapCreation extends AsyncTask<Integer, Void, MapView>
{
    MapActivity context;

    public MapCreation(MapActivity context)
    {
        this.context = context;
    }

    @Override
    protected MapView doInBackground(Integer... params)
    {
        ListView someListView = new ListView(context); //Completely fine!
        MapView someMapView = new MapView(context, OMITTED_KEY); //!!!!CRASH!!!!
        return someMapView;
    }

    protected void onPostExecute(MapView someMapView)
    {
           //do something
    }
}

Программа останавливается на "ThreadPoolExecutor.class" в:

} finally {
    processWorkerExit(w, completedAbruptly);
}

Примечание. Я знаю о пределе MapActivity / MapView в 1 экземпляр на процесс.Я не создал объект MapView до выполнения этой AsyncTask.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2014

Я надуваю карту из файла XML и затем помещаю ее в контейнер макета.

public void run() { try {

                    MapsInitializer.initialize(activityHost);

                    LayoutInflater inflater = (LayoutInflater) activityHost.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    mapView = (MapView) inflater.inflate(R.layout.map, mapView, true);

                    mapContainer.addView(mapView);
                    mapView.onCreate(null);
                    mapView.onResume();

                    googleMap = mapView.getMap();
                    if (googleMap == null)
                        return;

                    googleMap.setMyLocationEnabled(false);
                    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(mapLocation, 15.0f));
                    googleMap.getUiSettings().setZoomControlsEnabled(false);
                    googleMap.getUiSettings().setAllGesturesEnabled(false);


                } catch (GooglePlayServicesNotAvailableException e) {
                    Log.e("ERROR", "ERROR -  failed to create map");
                    return;
                }
            }
        }

и карта xml:

<com.google.android.gms.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:id="@+id/some_id"
    android:layout_width="fill_parent"
    android:layout_height="100dp"
    android:apiKey="YOUR_ID"
    android:visibility="visible"
    />
0 голосов
/ 25 августа 2011

Сначала я думаю, что вам нужно хотя бы получить ключ отладки для карты, иначе вы просто получите пустой экран

, тогда, если вы прочитаете информацию о конструкторе

public MapView(android.content.Context context,
           java.lang.String apiKey)

Constructs a MapView object.

Parameters:
    context - A MapActivity object.
    apiKey - A Google Maps API Key. See Obtaining a Maps API Key for complete information. 
Throws:
    java.lang.IllegalArgumentException - **if the enclosing context is not an instance of MapActivity.**

Картадолжен расширить MapActivity.

...