Как найти правильное значение android: имя для разрешения «java.lang.ClassNotFoundException»

#android #eclipse #adt

#Android #eclipse #adt

Вопрос:

Я пытаюсь работать с динамически добавляемыми фрагментами. Мои 2 фрагмента называются: library_view и controls_view и main_layout.xml это основной макет.

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fragmentstest"
android:versionCode="1"
android:versionName="1.0" >

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity android:name="MainActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>
  

Мой основной класс MainActivity.java . У меня установлена опция Android Private Libraries.

 import com.example.fragmentstest.R;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;


public class MainActivity extends Activity{
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main_layout);
        //add fragments programatically

        //ref to frag manager
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.present_activity_fragment, new LibraryActivity());
        fragmentTransaction.add(R.id.select_fragment, new SelectActivity());
        fragmentTransaction.commit();
    }

}
  

Я использовал android: name в <activity> , как это появилось в автоматических подсказках, но я предполагаю, что я делаю что-то неправильно.

Также безуспешно пытался:

  • .MainActivity
  • com.example.fragmentstest.MainActivity

Итак, мой вопрос в том, как мне определить точное значение поля android: name?

Класс MainActivity в моем коде расширяет Activity, а два фрагмента расширяют класс Fragments.

Это журнал ошибок:

 07-04 19:00:05.933: E/AndroidRuntime(18127): java.lang.RuntimeException: Unable to instantiate application com.example.fragmentstest.MainActivity: java.lang.ClassNotFoundException: Didn't find class "com.example.fragmentstest.MainActivity" on path: DexPathList[dexElements=[zip file "/data/app/com.example.fragmentstest-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.fragmentstest-2, /vendor/lib, /system/lib]]
  

Комментарии:

1. объявлена ли MainActivity внутри com / example / fragmentstest?

2. Используйте .MainActivity или ваш второй вариант.

3. @deathember Я уже пробовал эти два варианта, ни один из них не сработал.

4. Я не думаю, что это слово означает то, что вы думаете, что это значит… В этом коде нет ничего, что имело бы какое-либо отношение к фрагментам.

5. @G. Блейк Майке, хотя я новичок в разработке Android, я знаю, что это значит. Класс MainActivity программно включает фрагменты (2 из них для создания основного действия), выполнив 4 шага обращения к менеджеру фрагментов, запуска транзакции, добавления фрагментов и их фиксации. Если я неправильно понял концепцию, пожалуйста, поправьте меня.

Ответ №1:

вы должны указать имя своего пакета в первой строке кода вашей активности следующим образом

 package com.SHINE.ui;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Mapactivity extends Activity implements OnClickListener,
        TranslationListner, OnTouchListener {
  

здесь мой код в XML-манифесте

 <activity
            android:name="com.SHINE.ui.Mapactivity"
  

Комментарии:

1. О, понял, я забыл упомянуть пакет в моих классах java. Если вы могли бы изменить свой ответ, чтобы сказать это, я буду рад выбрать его. Спасибо, что указали на это косвенно!

2. Эй, просто для большей точности, name = MainActivity также работает, поэтому, возможно, вы могли бы просто включить в свой ответ tell о части, касающейся пакета. Еще раз спасибо..

3. «это включено» вы должны указать имя вашего пакета в первой строке

4. Я хочу сказать, что нет необходимости изменять <activity android:name="MainActivity" , это работает без каких-либо изменений.

Ответ №2:

Изменить

 <activity android:name="MainActivity"
  

Для

 <activity android:name=".MainActivity"
  

Комментарии:

1. Как я уже сказал, я уже пробовал .MainActivity, но это не работает.

2. Не могли бы вы сказать нам, в каком пакете находится ваша активность?

3. У меня есть файлы моего класса в пакете (по умолчанию)… переместил их в пакет com.example.fragmentstest и смог заставить его работать!