FragmentActivity et exception ClassNotFoundException
Bonjour,
J'ai crée une application Android qui fonctionne sans soucis, mais pour certains besoins j'ai besoin que mon activité principale étende de FragmentActivity au lieu d'Activity. Cependant cela lève une exception dont je n'arrive pas à trouver la source.
Exception :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| W/dalvikvm(17660): Unable to resolve superclass of Lfr/lri/insitu/probe/ui/MainActivity; (27)
W/dalvikvm(17660): Link of class 'Lfr/lri/insitu/probe/ui/MainActivity;' failed
D/AndroidRuntime(17660): Shutting down VM
W/dalvikvm(17660): threadid=1: thread exiting with uncaught exception (group=0x40e852a0)
E/AndroidRuntime(17660): FATAL EXCEPTION: main
E/AndroidRuntime(17660): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{fr.lri.insitu.probe/fr.lri.insitu.probe.ui.MainActivity}: java.lang.ClassNotFoundException: fr.lri.insitu.probe.ui.MainActivity
E/AndroidRuntime(17660): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2031)
E/AndroidRuntime(17660): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2132)
E/AndroidRuntime(17660): at android.app.ActivityThread.access$700(ActivityThread.java:140)
E/AndroidRuntime(17660): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
E/AndroidRuntime(17660): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(17660): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(17660): at android.app.ActivityThread.main(ActivityThread.java:4918)
E/AndroidRuntime(17660): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(17660): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(17660): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
E/AndroidRuntime(17660): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
E/AndroidRuntime(17660): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(17660): Caused by: java.lang.ClassNotFoundException: fr.lri.insitu.probe.ui.MainActivity
E/AndroidRuntime(17660): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
E/AndroidRuntime(17660): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
E/AndroidRuntime(17660): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
E/AndroidRuntime(17660): at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
E/AndroidRuntime(17660): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2022)
E/AndroidRuntime(17660): ... 11 more |
Code de mon activité principale :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| package fr.lri.insitu.probe.ui;
import fr.lri.insitu.probe.R;
import fr.lri.insitu.probe.background.TimeRuleService;
import android.os.Bundle;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends FragmentActivity {
// If the probe is working
private boolean probeWorking = false;
private Button startStopButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Remove the title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main_page);
//Getting the startStopButton
startStopButton = (Button)findViewById(R.id.buttonStartStop);
}
@Override
protected void onResume() {
super.onResume();
boolean isRunning = isMyServiceRunning();
if (isRunning) {
startStopButton.setText(R.string.button_stop);
probeWorking = true;
} else {
startStopButton.setText(R.string.button_start);
probeWorking = false;
}
}
@Override
public void onDestroy() {
super.onDestroy();
(...)
Context context = getApplicationContext();
CharSequence text = "Probe stopped";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
/**
* Call when a button is clicked
* @param v
*/
public void onClick(View v) {
(...)
}
} |
Le manifest :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="fr.lri.insitu.probe"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission
android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="fr.lri.insitu.probe.ui.MainActivity"
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>
<activity
android:name="fr.lri.insitu.probe.ui.SettingsActivity"
android:label="@string/settings_activity"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="fr.lri.insitu.probe.ui.StatusActivity"
android:label="@string/status_activity"
android:screenOrientation="portrait" >
</activity>
<service android:name="fr.lri.insitu.probe.background.ListenerService"></service>
<service android:name="fr.lri.insitu.probe.background.ModerationService"></service>
<service android:name="fr.lri.insitu.probe.background.TimeRuleService"></service>
</application>
</manifest> |
Cette exception est levée dès le lancement de l'application, avant même l'appel de super.onCreate(...).
J'ai essayé différentes choses basées sur mes recherches, mais rien n'a fonctionné. J'ai notamment coché Android Private Libraries dans Java Build Path, j'ai tenté Clean Up, mais rien ne change. Si je repasse sur Activity ça refonctionne cependant. Il n'y a pas de problème de noms et j'ai relu plusieurs fois le manifest sans rien voir.
Si vous avez des idées sur pourquoi FragmentActivity lève une exception tandis qu'Activity fonctionne parfaitement, je suis preneur.
Bonne journée.
Edit : Après création d'un nouveau projet dans lequel j'ai mis les sources de mon premier projet, ça fonctionne. Merci Eclipse :(. Merci de m'avoir lu !