Android:android.view.InflateException:二进制XML文件行#13:错误膨胀类<未知>在三星Galaxy S [英] Android: android.view.InflateException: Binary XML file line #13: Error inflating class <unknown> in SAMSUNG Galaxy S
问题描述
完整的堆栈跟踪是:
ERROR / AndroidRuntime(28111 ):FATAL EXCEPTION:AsyncTask#2
ERROR / AndroidRuntime(28111):java.lang.RuntimeException:执行doInBackground()时发生错误
ERROR / AndroidRuntime(28111):在android.os.AsyncTask $ 3.done(AsyncTask.java:200)
ERROR / AndroidRuntime(28111):at java.util.concurrent.FutureTask $ Sync.innerSetException(FutureTask.java:273)
ERROR / AndroidRuntime(28111) :java.util.concurrent.FutureTask.setException(FutureTask.java:124)
ERROR / AndroidRuntime(28111):at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:307)
ERROR / AndroidRuntime(28111):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
ERROR / AndroidRuntime(28111):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor。 java:1068)
ERROR / AndroidRuntime(28111):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.j ava:561)
错误/ AndroidRuntime(28111):在java.lang.Thread.run(Thread.java:1096)
错误/ AndroidRuntime(28111):引起:android.view.InflateException:二进制XML文件行#13:错误膨胀类<未知>
ERROR / AndroidRuntime(28111):在android.view.LayoutInflater.createView(LayoutInflater.java:513)
错误/ AndroidRuntime(28111):在com.android.internal.policy.impl.PhoneLayoutInflater。 onCreateView(PhoneLayoutInflater.java:56)
错误/ AndroidRuntime(28111):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
错误/ AndroidRuntime(28111):在android.view。 LayoutInflater.rInflate(LayoutInflater.java:618)
错误/ AndroidRuntime(28111):在android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
错误/ AndroidRuntime(28111):在android。 view.LayoutInflater.inflate(LayoutInflater.java:407)
错误/ AndroidRuntime(28111):在android.view.LayoutInflater.inflate(LayoutInflater.java:320)
错误/ AndroidRuntime(28111):at my.package.MyClass.b(未知来源)
错误/ AndroidRuntime(28111):at my.package.MyClass.a(未知来源)
错误/ AndroidRuntime(28111):at my.package。 MyClass.updateUI(未知酸ce)
ERROR / AndroidRuntime(28111):at my.package.MyClass.UpdateUITask.doInBackground(Unknown Source)
ERROR / AndroidRuntime(28111):at android.os.AsyncTask $ 2.call(AsyncTask。 java:185)
错误/ AndroidRuntime(28111):在java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305)
错误/ AndroidRuntime(28111):... 4更多
ERROR / AndroidRuntime(28111):由...引发:java.lang.reflect.InvocationTargetException
ERROR / AndroidRuntime(28111):在android.widget.EditText。< init>(EditText.java:101)
ERROR / AndroidRuntime(28111):java.lang.reflect.Constructor.constructNative(Native Method)
ERROR / AndroidRuntime(28111):java.lang.reflect.Constructor.newInstance(Constructor.java :446)
错误/ AndroidRuntime(28111):在android.view.LayoutInflater.createView(LayoutInflater.java:500)
错误/ AndroidRuntime(28111):... 16更多
错误/ AndroidRuntime(28111):引起的:java.lang.RuntimeException:无法创建处理程序没有调用Looper.prepare()
ERROR / AndroidRuntime(28111):在android.os.Handler。< init>(Handler.java:121)
ERROR / AndroidRuntime(28111) :android.view.GestureDetector $ GestureHandler。< init>(GestureDetector.java:250)
ERROR / AndroidRuntime(28111):android.view.GestureDetector。< init>(GestureDetector.java:370)
ERROR / AndroidRuntime(28111):android.view.GestureDetector。< init>(GestureDetector.java:347)
ERROR / AndroidRuntime(28111):android.view.GestureDetector。< init> ;(GestureDetector.java:331)
ERROR / AndroidRuntime(28111):在android.widget.EditText。< init>(EditText.java:113)
ERROR / AndroidRuntime(28111):.. 。20更多
首先,发生了什么?主要的错误是什么? 无法在未调用Looper.prepare()
或的线程内创建处理程序android.view.InflateException:二进制XML文件行#13:错误充气类<未知>
?
当我膨胀一个 View
时,这似乎发生了,其XML(R.layout.field_editable_label_value_numeric)行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/>
编辑:我忘了告诉我使用Proguard,不知道是否有影响在这个问题上(我不这么认为)。
我还添加了我认为问题发生的代码:
MyClass.a:
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 .ItemLinearLayout);
//清除UI
mainLayout.removeAllViews();
//重新设置所有视图
for(查看视图:视图){
mainLayout.addView(view);
}
}
}
MyClass.b:
final ArrayList< View> viewsToAdd = new ArrayList< View>() ;
查看视图= inflater.inflate(R.layout.field_editable_label_value_numeric,null,true);
viewsToAdd.add(view);
返回视图;
感谢您的答案,但我得到的最佳解释是这里:充气w在背景线程
基本上,似乎三星Galaxy S有一个 EditText
实现,通胀只能在UI Thread中完成。
希望这可以帮助遇到同样问题的人。
I am having a strange error that seems to occur only in Samsung Galaxy S with Android 2.2 (I've tested the application in Motorola Milestone 2 Android 2.2 / Xperia X10 Android 1.6 / Nexus One Android 2.2 / Google G1 Android 1.5 and 1.5 emulator and in such devices the error does not occur).
The complete stack trace is:
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
First of all, what is going on? What is the main error? Can't create handler inside thread that has not called Looper.prepare()
or android.view.InflateException: Binary XML file line #13: Error inflating class <unknown>
?
This seems to occur when I am inflating a View
whose XML (R.layout.field_editable_label_value_numeric) line 13 is:
<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: I forgot to tell that I am using Proguard, don't know if that somehow has influence on this issue (I don't think so).
I also added the code where I think the problem is happening:
MyClass.a:
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;
Thanks for the answers, but the best explanation I got was here: Inflate a view in a background thread
Basically, it seems that Samsung Galaxy S has an EditText
implementation whose inflation can only be done in the UI Thread.
Hope this helps someone who runs into the same kind of problem.
这篇关于Android:android.view.InflateException:二进制XML文件行#13:错误膨胀类<未知>在三星Galaxy S的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!