Карта Google в отдельном действии, в результате чего: java.lang.IllegalStateException: не удалось выполнить метод действия

У меня сейчас проблемы с доступом к Hello Mapview, http://developer.android.com/training/tutorials/views/hello-mapview.html, но я думаю, что сделал это правильно. Я хочу показать карту в отдельном действии.

Map.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

 <com.google.android.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:apiKey="working key"
    />

</LinearLayout>

Событие нажатия кнопки, которое должно отображать мою карту

public void showMap(View v){

    Intent intent = new Intent(getBaseContext(), GoogleMapsActivity.class);
    startActivity(intent);
}

GoogleMapsActivity.java

public class GoogleMapsActivity extends MapActivity
{
MapView mapView;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.map);

    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);
}

Активность добавляется в мой манифест, Google API включен и т. д. Она работает, если я помещаю карту в свою основную активность, но не в свою GoogleMapsActivity. Пожалуйста, скажите мне, что я пропустил здесь.

Спасибо


person Johan    schedule 24.06.2012    source источник
comment
Вы уже разместили здесь весь код?   -  person Simon Dorociak    schedule 24.06.2012
comment
@ hawaii.five-0 То, что я считаю важной частью. Хотели бы вы увидеть что-нибудь еще?   -  person Johan    schedule 24.06.2012
comment
где исключение? в какой строке?   -  person Ran    schedule 24.06.2012
comment
Поскольку эта ошибка обычно возникает, когда вы хотите обновить UI из рабочего потока.   -  person Simon Dorociak    schedule 24.06.2012


Ответы (2)


Из https://developers.google.com/maps/documentation/android/reference/< /а>:

Для каждого процесса поддерживается только одна активность MapActivity. Одновременное выполнение нескольких действий MapActivities может вызвать неожиданные и нежелательные помехи.

По сути, вы можете иметь только 1 MapActivity, а MapView можно размещать только в MapActivity. То, что вы хотите, в принципе невозможно.

РЕДАКТИРОВАТЬ: не уверен, что это сработает для вас, но вы можете попробовать отметить свое второе действие с помощью android:process=":remote" и посмотреть, сработает ли это, но я сомневаюсь в этом.

РЕДАКТИРОВАТЬ: очевидно, есть некоторая путаница. Посмотрите на https://developers.google.com/maps/documentation/android/reference/com/google/android/maps/MapView. В нем говорится, что:

MapView может быть создан (или расширен) только с помощью MapActivity. Это потому, что это зависит от потоков, которые обращаются к сети и файловой системе в фоновом режиме; эти потоки должны контролироваться управлением жизненным циклом в MapActivity. Плитки кэшируются в файловой системе в каталоге вашего приложения. Кэш управляется автоматически, поэтому вам не нужно ничего с ним делать, и вы можете удалить его в любое время.

Я повторюсь: вы НЕ МОЖЕТЕ отображать MapView в любом другом действии.

person Femi    schedule 24.06.2012
comment
Он просто хочет показать карту в другом действии, ему не нужны два класса MapActivity. - person Ran; 24.06.2012
comment
Спасибо, но все именно так, как сказал Ран. Но я обнаружил проблему, опечатку моей активности в моем файле манифеста:/ - person Johan; 24.06.2012
comment
Ах: у вас нет НИ ОДНОЙ работающей MapActivity. Я думал, что у тебя один работает, а другой не заработает. - person Femi; 24.06.2012
comment
Вы НЕ МОЖЕТЕ отображать MapView в любом другом действии. Уверены ли вы? Потому что мне только что удалось сделать это в моем GoogleMapsActivity, который использует отдельный xml - person Johan; 24.06.2012
comment
Если вы обновите свой ответ строкой о файле манифеста, я могу принять ваш ответ :) - person Johan; 24.06.2012
comment
Я мог бы, но я на самом деле не ответил на него :). Вы должны ответить на него, затем подождать день или два, а затем принять свой собственный ответ. Я действительно не могу претендовать на правильность. - person Femi; 24.06.2012

Проблема заключалась в опечатке в моем файле манифеста,

<activity android:name=".GoogleMapActivity" /> //missing an "s"
person Johan    schedule 24.06.2012