Android: android.vue.InflateException: Binaire dans le fichier XML de la ligne #13: Erreur de gonflage de classe <inconnu> en SAMSUNG Galaxy S
Je vais avoir une erreur étrange qui semble ne se produire que dans le Samsung Galaxy S avec Android 2.2 (j'ai testé l'application Motorola Milestone 2 Android 2.2 /Xperia X10 Android 1.6 /Nexus One Android 2.2 /Google G1 Android 1.5 et 1.5 émulateur et dans de tels dispositifs, l'erreur ne se produit pas).
La trace de la pile complète est:
ERROR/AndroidRuntime(28111): FATAL EXCEPTION: AsyncTask #2
ERROR/AndroidRuntime(28111): java.lang.RuntimeException: An error occured while executing doInBackground()
ERROR/AndroidRuntime(28111): at android.os.AsyncTask$3.done(AsyncTask.java:200)
ERROR/AndroidRuntime(28111): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
ERROR/AndroidRuntime(28111): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
ERROR/AndroidRuntime(28111): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
ERROR/AndroidRuntime(28111): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
ERROR/AndroidRuntime(28111): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
ERROR/AndroidRuntime(28111): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
ERROR/AndroidRuntime(28111): at java.lang.Thread.run(Thread.java:1096)
ERROR/AndroidRuntime(28111): Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class <unknown>
ERROR/AndroidRuntime(28111): at android.view.LayoutInflater.createView(LayoutInflater.java:513)
ERROR/AndroidRuntime(28111): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
ERROR/AndroidRuntime(28111): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
ERROR/AndroidRuntime(28111): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
ERROR/AndroidRuntime(28111): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
ERROR/AndroidRuntime(28111): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
ERROR/AndroidRuntime(28111): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
ERROR/AndroidRuntime(28111): at my.package.MyClass.b(Unknown Source)
ERROR/AndroidRuntime(28111): at my.package.MyClass.a(Unknown Source)
ERROR/AndroidRuntime(28111): at my.package.MyClass.updateUI(Unknown Source)
ERROR/AndroidRuntime(28111): at my.package.MyClass.UpdateUITask.doInBackground(Unknown Source)
ERROR/AndroidRuntime(28111): at android.os.AsyncTask$2.call(AsyncTask.java:185)
ERROR/AndroidRuntime(28111): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
ERROR/AndroidRuntime(28111): ... 4 more
ERROR/AndroidRuntime(28111): Caused by: java.lang.reflect.InvocationTargetException
ERROR/AndroidRuntime(28111): at android.widget.EditText.<init>(EditText.java:101)
ERROR/AndroidRuntime(28111): at java.lang.reflect.Constructor.constructNative(Native Method)
ERROR/AndroidRuntime(28111): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
ERROR/AndroidRuntime(28111): at android.view.LayoutInflater.createView(LayoutInflater.java:500)
ERROR/AndroidRuntime(28111): ... 16 more
ERROR/AndroidRuntime(28111): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
ERROR/AndroidRuntime(28111): at android.os.Handler.<init>(Handler.java:121)
ERROR/AndroidRuntime(28111): at android.view.GestureDetector$GestureHandler.<init>(GestureDetector.java:250)
ERROR/AndroidRuntime(28111): at android.view.GestureDetector.<init>(GestureDetector.java:370)
ERROR/AndroidRuntime(28111): at android.view.GestureDetector.<init>(GestureDetector.java:347)
ERROR/AndroidRuntime(28111): at android.view.GestureDetector.<init>(GestureDetector.java:331)
ERROR/AndroidRuntime(28111): at android.widget.EditText.<init>(EditText.java:113)
ERROR/AndroidRuntime(28111): ... 20 more
Tout d'abord, ce qui se passe? Quelle est la principale erreur? Can't create handler inside thread that has not called Looper.prepare()
ou android.view.InflateException: Binary XML file line #13: Error inflating class <unknown>
?
Ce qui semble se produire quand je suis en gonflant un View
dont le XML (R. layout.field_editable_label_value_numeric) ligne 13:
<EditText android:id="@+id/editableLabel"
android:layout_gravity="left|center_vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:textColor="@color/black"
android:textStyle="bold" />
EDIT: j'ai oublié de dire que je suis à l'aide de Proguard, je ne sais pas si que d'une certaine façon, a une influence sur ce problème (je ne le pense pas).
J'ai aussi ajouté le code où je pense que le problème est en train de se produire:
MyClass.un:
final LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ArrayList<View> views = MyClass.b(inflater);
runOnUiThread(new Runnable() {
@Override
public void run() {
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.ItemLinearLayout);
//clear UI
mainLayout.removeAllViews();
//re-set all views
for (View view : views) {
mainLayout.addView(view);
}
}
}
MyClass.b:
final ArrayList<View> viewsToAdd = new ArrayList<View>();
View view = inflater.inflate(R.layout.field_editable_label_value_numeric, null, true);
viewsToAdd.add(view);
return views;
dymmeh je viens de editted et ajout d'un code
OriginalL'auteur pandre | 2011-07-13
Vous devez vous connecter pour publier un commentaire.
Merci pour les réponses, mais la meilleure explication que j'ai eu était ici: Gonfler une vue dans un thread d'arrière-plan
Fondamentalement, il semble que le Samsung Galaxy S a un
EditText
de mise en œuvre dont l'inflation ne peut être fait dans le Thread de l'INTERFACE utilisateur.Espère que cela aide quelqu'un qui s'exécute dans le même genre de problème.
OriginalL'auteur pandre
Ne pas mettre à jour votre INTERFACE utilisateur à partir d'un thread d'arrière-plan -- utiliser le thread d'INTERFACE utilisateur.
La trace de la pile ressemble à l'inflation qui se passe dans le
doInBackground
méthode d'un AsyncTask. C'est probablement cette ligne:Si c'est le cas, alors vous devriez la faire sortir de la thread d'arrière-plan. Si le code que vous avez posté est en effet le
doInBackground
, vous pouvez également envisager de déplacer votrerunOnUiThread
bloc enonPostExecute
.OriginalL'auteur Mike
Probablement problème semblable: EditText bizarre crash sur le LG Optimus w/Swype (fonctionne sur émulateur et les Droïdes)
Il semble que l'invocation de la fonction Looper.prepare() dans le thread de l'INTERFACE utilisateur va résoudre ce exeption.
Plus d'infos là: http://developer.android.com/reference/android/os/Looper.html
OriginalL'auteur pawelzieba