2013-06-22 3 views
0

Я объявил все свои классы в манифесте Android, но по какой-то причине я продолжаю получать ActivityNotFoundException.Android не может найти класс, хотя он объявлен в манифесте

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.abc.calorieapp" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="15" /> 

    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

    <uses-feature 
     android:name="android.hardware.camera" 
     android:required="false" /> 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

    <application 
     android:name=".activities.CalorieApplication" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".activities.AActivity" 
      android:label="@string/title_activity_a" 
      android:screenOrientation="portrait" > 
     </activity> 
     <activity 
      android:name=".activities.BActivity" 
      android:label="@string/title_activity_b" 
      android:screenOrientation="portrait" > 
     </activity> 
     <activity 
      android:name=".activities.CActivity" 
      android:label="@string/title_activity_c" 
      android:screenOrientation="portrait" > 
     </activity> 

     <activtity 
      android:name=".activities.DActivity" 
      android:label="@string/title_activity_d" 
      android:screenOrientation="portrait" /> 


     <activity 
      android:name=".activities.EActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

и вот вызов, который дает мне неприятности

Intent intent = new Intent (AActivity.this, BActivity.class); 
       startActivity (intent); 

BActivity.java

package com.wks.calorieapp.activities; 



public class BActivity extends Activity 
{ 
    private static final String TAG = BActivity.class.getCanonicalName(); 

    private EditText editSearch; 
    private Button buttonSearch; 
    private ViewSwitcher viewSwitcher; 
    private RelativeLayout viewLoading; 
    private LinearLayout viewResults; 
    private TextView textLoading; 
    private ProgressBar progressLoading; 
    private ExpandableListView listNutritionInfo; 

    private enum BActivityView{VIEW_IDLE,VIEW_LOADING,VIEW_RESULTS}; 
    private BActivityView searchActivityView; 

    @Override 
    protected void onCreate (Bundle savedInstanceState) 
    { 
     super.onCreate (savedInstanceState); 
     this.setContentView (R.layout.activity_b); 
     setupView(); 
     setupListeners(); 
    } 

Полный StackTrace:

06-22 21:01:50.625: E/AndroidRuntime(18120): FATAL EXCEPTION: main 
06-22 21:01:50.625: E/AndroidRuntime(18120): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.wks.calorieapp/com.wks.calorieapp.activities.BActivity}; have you declared this activity in your AndroidManifest.xml? 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1511) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1387) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.app.Activity.startActivityForResult(Activity.java:3195) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.app.Activity.startActivity(Activity.java:3302) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at com.wks.calorieapp.activities.HomeActivity$OnGridActivitiesClicked.onItemClick(EActivity.java:89) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.widget.AdapterView.performItemClick(AdapterView.java:292) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.widget.AbsListView.performItemClick(AbsListView.java:1181) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2709) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.widget.AbsListView$1.run(AbsListView.java:3464) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.os.Handler.handleCallback(Handler.java:605) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.os.Looper.loop(Looper.java:137) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at android.app.ActivityThread.main(ActivityThread.java:4511) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at java.lang.reflect.Method.invokeNative(Native Method) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at java.lang.reflect.Method.invoke(Method.java:511) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
06-22 21:01:50.625: E/AndroidRuntime(18120): at dalvik.system.NativeStart.main(Native Method) 
+2

Пожалуйста, вставьте всю трассировку стеки, и, пожалуйста, убедитесь, что 'BActivity.class' действительно находится в' com.abc.calorieapp.activities'. – CommonsWare

+0

Да, класс определенно находится в пакете. –

+0

Попробуйте полностью определить имя класса в атрибуте 'android: name' в манифесте (т. Е. Используйте' com.wks.calorieapp.activities.BActivity' вместо '.activities.BActivity'). – CommonsWare

ответ

1

Все выглядит хорошо, и из того, что вы описали, вы все прекрасно настроили.

Когда все остальное терпит неудачу, всегда убедитесь, что

  1. Eclipse, до настоящего времени
  2. плагин ADT до настоящего времени, и
  3. Новейшие инструменты от менеджера SDK установлены

и повторите попытку.

Иногда процесс сборки и развертывания, по-видимому, как-то прикручивается.

Казалось, чтобы помочь этому парню: https://stackoverflow.com/a/9552169/833647 (и различные другие вопросы/ответы вокруг StackOverflow)

+0

Спасибо, что решил. –

-1

только написать андроид: имя = «BActivity» в вашем файле манифеста Надеюсь, что это будет работать, Best Of Luck

+0

Почему вы думаете, что это поможет? – CommonsWare

+0

Мы объявляем Activity в манифесте, как этот андроид: name = ". Activity" Это базовая концепция – Rauf

+2

Вы также можете поместить действия в другие пакеты. – CommonsWare

-1

Я никогда не ставил имя пакета перед именем активность , Поэтому удалите .activities перед именем Activity в вашем манифесте, оно должно работать тогда.

+0

в теге манифеста, объявление пакета говорит 'com.abc.calorieapp', но мои классы находятся в другом подпакете под названием' .activities', поэтому мне нужно добавить этот тег чтобы дать полную спецификацию пакета для класса. –

1

Это проблема с вашим манифестом. Пожалуйста, проверьте свой основной пакет в соответствии с кодом

package="com.abc.calorieapp"
так что все вы суб-пакетов (канонический пакет) будет следовать этому, как
com.abc.calorieapp.activities.AActivity

Теперь реальная проблема вы использовали пакет первоначально как пакет com.wks.calorieapp.activities

Именно поэтому ваше приложение не может получить реальную активность.

Пожалуйста, измените пакет в манифесте, как package="com.wks.calorieapp"

и ваше приложение должно работать нормально.

1

Для всех видов деятельности, кроме пусковой один убедитесь, что они также имеют намерения фильтр только в качестве пусковой установки, но, как следующим образом.

<intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 

Вместо LAUNCHER поставил DEFAULT, попробовать и посмотреть