Android Explicit Intent выдает ошибку NoClassDefFound - PullRequest
7 голосов
/ 01 мая 2011

Я пытаюсь использовать явное намерение для отображения MapView в моем приложении для Android. Хотя я не вижу ничего плохого в своем коде, я продолжаю получать «NoClassDefFoundError», когда пытаюсь начать свою деятельность. В основном, из моей основной деятельности (SetCriteria) я создаю явное намерение, когда пользователь нажимает кнопку:

 Log.i(TAG, "Showing map..");
 try{
   Intent intentMap = new Intent(view.getContext(), AddLocation.class);
   startActivity(intentMap);
}catch(Throwable ex) {
   Log.e(TAG, "Error occured while trying to display map", ex);
}

Мой LogCat отображает:

 java.lang.NoClassDefFoundError: com.adm.AddLocation
 ...
 Caused by: java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation

Мой манифест выглядит так:

<application android:label="@string/app_name" android:icon="@drawable/ic_launcher_red">
    <uses-library android:name="com.google.android.maps"/>              
    <activity android:name=".SetCriteria"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>        
    <activity android:name=".AddLocation" 
          android:label="@string/add_location">         
    </activity>
</application>

У меня есть только одна посылка: com.adm. Так что может быть не так? У меня нет проблем с запуском карты с помощью Intent (Intent.ACTION_VIEW, uri), но я хочу, чтобы моя конкретная деятельность была связана с картой.

Ответы [ 2 ]

1 голос
/ 01 мая 2011

Вы должны удалить "." (точку) перед именем вашего класса во втором объявлении активности, чтобы оно выглядело так:

<activity android:name="AddLocation" android:label="@string/add_location">
1 голос
/ 01 мая 2011

Из фрагмента манифеста не ясно, какой пакет вы определили.

Вам нужно поместить его в элемент манифеста верхнего уровня:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.adm"
          >

    <application android:icon="@drawable/icon" android:label="@string/app_name" ...

Если вы не добавите это, система не будет использовать пакет, и ваша активность ".AddLocation" завершится как "AddLocation" без класса, который не совпадает с com.adm.AddLocation.

...