Débutant essayant de terminer le didacticiel Ma première application fourni par Google. Sur le chemin de cette exception fatale, j'ai importé de nombreux paquets aléatoires pour éliminer les erreurs "impossible à résoudre", ActionBarActivity, EditText, Fragment, LayoutInflater, etc. Quoi qu'il en soit, mon application se bloque et génère une exception Fatal lorsque je clique sur le bouton "Envoyer" de l'activité principale. Voici mon code et mon fichier logcat.
MyActivity.Java (alias MainActivity.Java du didacticiel)
package magiccoupons.tutapp;
import Android.app.Activity;
import Android.content.Intent;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
import Android.widget.EditText;
public class MyActivity extends Activity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/** Called when the user clicks the Send button */
public void sendMessage(View view) {
// Do something in response to button
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
}
DisplayMessageActivity.Java:
package magiccoupons.tutapp;
import Android.widget.*;
import Android.content.Intent;
import Android.os.Bundle;
import Android.view.MenuItem;
import Android.view.*;
import Android.support.v7.app.ActionBarActivity;
import Android.app.Fragment;
public class DisplayMessageActivity extends ActionBarActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the message from the intent
Intent intent = getIntent();
String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);
// Create the text view
TextView textView = new TextView(this);
textView.setTextSize(40);
textView.setText(message);
// Set the text view as the activity layout
setContentView(textView);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() { }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_display_message,
container, false);
return rootView;
}
}
*/
}
build.gradle:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 'Android-L'
buildToolsVersion '20'
defaultConfig {
applicationId "magiccoupons.tutapp"
minSdkVersion 20
targetSdkVersion 20
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.Android.support:support-v4:20.0.0'
//compile 'com.Android.support:appcompat-v7:21.0.0-rc1'
}
activity_my.xml:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="horizontal"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
Android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="magiccoupons.tutapp.MainActivity">
<EditText Android:id="@+id/edit_message"
Android:layout_weight="1"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:hint="@string/edit_message" />
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/button_send"
Android:onClick="sendMessage" />
</LinearLayout>
activity_display_message.xml:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
Android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="magiccoupons.tutapp.DisplayMessageActivity">
<TextView
Android:text="@string/hello_world"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</RelativeLayout>
et logcat:
08-21 11:24:36.088 3645-3645/magiccoupons.tutapp I/Process﹕ Sending signal. PID: 3645 SIG: 9
08-21 11:37:33.584 4149-4149/magiccoupons.tutapp W/Resources﹕ Preloaded drawable resource #0x1080093 (Android:drawable/sym_def_app_icon) that varies with configuration!!
08-21 11:37:33.676 4149-4149/magiccoupons.tutapp I/am_on_resume_called﹕ [0,magiccoupons.tutapp.MyActivity]
08-21 11:37:33.905 4149-4149/magiccoupons.tutapp D/gralloc_goldfish﹕ Emulator without GPU emulation detected.
08-21 11:37:38.139 4149-4149/magiccoupons.tutapp I/am_on_paused_called﹕ [0,magiccoupons.tutapp.MyActivity]
08-21 11:37:38.218 4149-4149/magiccoupons.tutapp I/Choreographer﹕ Skipped 75 frames! The application may be doing too much work on its main thread.
08-21 11:37:38.356 4149-4149/magiccoupons.tutapp D/AndroidRuntime﹕ Shutting down VM
08-21 11:37:38.369 4149-4149/magiccoupons.tutapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: magiccoupons.tutapp, PID: 4149
Java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$styleable;
at Android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.Java:106)
at Android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.Java:57)
at Android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.Java:99)
at magiccoupons.tutapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.Java:15)
at Android.app.Activity.performCreate(Activity.Java:5720)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1102)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2208)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2317)
at Android.app.ActivityThread.access$800(ActivityThread.Java:143)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1258)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5070)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:836)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:631)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "Android.support.v7.appcompat.R$styleable" on path: DexPathList[[Zip file "/data/app/magiccoupons.tutapp-1.apk"],nativeLibraryDirectories=[/data/app-lib/magiccoupons.tutapp-1, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:56)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:511)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:469)
at Android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.Java:106)
at Android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.Java:57)
at Android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.Java:99)
at magiccoupons.tutapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.Java:15)
at Android.app.Activity.performCreate(Activity.Java:5720)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1102)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2208)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2317)
at Android.app.ActivityThread.access$800(ActivityThread.Java:143)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1258)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5070)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:836)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:631)
Suppressed: Java.lang.ClassNotFoundException: Android.support.v7.appcompat.R$styleable
at Java.lang.Class.classForName(Native Method)
at Java.lang.BootClassLoader.findClass(ClassLoader.Java:781)
at Java.lang.BootClassLoader.loadClass(ClassLoader.Java:841)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:504)
... 18 more
Caused by: Java.lang.NoClassDefFoundError: Class "Landroid/support/v7/appcompat/R$styleable;" not found
... 22 more
Désolé si j'ai manqué quelque chose et cette question est complètement inutile et/ou une dupe. Merci.
Vous obtenez cette erreur pour les raisons suivantes:
Dans votre fichier de construction Gradle, votre application cible et compile avec la version bêta d'Android en cours de développement avec:
compileSdkVersion 'Android-L'
buildToolsVersion '20'
aussi bien que
minSdkVersion 20
targetSdkVersion 20
La première chose à noter est que cette application ne fonctionnera pas correctement (pour le moment) sur aucun appareil sans Android-L clignotant.
Le véritable noeud de votre problème est dans DisplayMessageActivity, il s’étend via l’héritage [ActionBarActivity]: ( https://developer.Android.com/reference/Android/support/v7/app/ActionBarActivity.html c'est l'une des classes de la bibliothèque de support pour AppCompat.
Pour résoudre ce problème, modifiez votre SDK min à 10 (ou 14 qui est un sandwich à la crème glacée), votre SDK max à 19 (Kit Kat) et supprimez le commentaire de la bibliothèque appcompat-v7 dans vos dépendances.
En remarque, lorsque vous déclarez des widgets dans leurs activités/fragments respectifs, il est généralement conseillé de laisser leur portée en dehors de toute méthode:
EditText editText;
Button sendMessageButton;
// Then in your onCreate() method
editText = (EditText) findViewById(R.id.editText);
sendMessageButton = (Button) findViewById(R.id.sendMessageButton);
Cela permet de réduire la réaffectation de mémoire et de rendre votre code un peu plus lisible. Parfois, vous devrez peut-être plier les règles un peu, mais c'est la pratique courante.
J'ai supprimé le dossier 'build' dans le dossier "yourAppName\app"
et tout a bien fonctionné. Si la solution ci-dessus ne fonctionne pas, essayez ceci. Le dossier build sera généré automatiquement lorsque vous reconstruirez votre projet.
Dans mon cas, j'avais une mise en page définie pour 720p mais non définie pour les résolutions par défaut, elle se bloquait. L'ajout de ce fichier de présentation a résolu ce problème. Logcat ne ment pas.
Juste Build->Clean Project
,
et ensuite Build->Rebuild Project
.
C'est tout.