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 de mon activité principale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Le manifest :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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) { (...) } }
Cette exception est levée dès le lancement de l'application, avant même l'appel de super.onCreate(...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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 !
Partager