安卓:android.view.InflateException:二进制XML文件中的行#13:错误充气类<未知>在三星Galaxy S [英] Android: android.view.InflateException: Binary XML file line #13: Error inflating class <unknown> in SAMSUNG Galaxy S

查看:319
本文介绍了安卓:android.view.InflateException:二进制XML文件中的行#13:错误充气类<未知>在三星Galaxy S的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个奇怪的错误,似乎只有三星Galaxy S的发生与Android 2.2(我测试过2.2 / Xperia X10的安卓1.6 / Nexus One的Andr​​oid的2.2 /谷歌G1的Andr​​oid 1.5和摩托罗拉里程碑2的Andr​​oid应用1.5仿真器和在这样的装置中不会发生的错误)。

完整的堆栈跟踪是:

  ERROR / AndroidRuntime(28111):致命异常:AsyncTask的#2
ERROR / AndroidRuntime(28111):java.lang.RuntimeException的:执行doInBackground时出错()
ERROR / AndroidRuntime(28111):在android.os.AsyncTask $ 3.done(AsyncTask.java:200)
ERROR / AndroidRuntime(28111):在java.util.concurrent.FutureTask中$ Sync.innerSetException(FutureTask.java:273)
ERROR / AndroidRuntime(28111):在java.util.concurrent.FutureTask.setException(FutureTask.java:124)
ERROR / AndroidRuntime(28111):在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):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:561)
ERROR / AndroidRuntime(28111):在java.lang.Thread.run(Thread.java:1096)
ERROR / AndroidRuntime(28111):android.view.InflateException:二进制XML文件中的行#13:产生的原因错误充气类<未知>
ERROR / AndroidRuntime(28111):在android.view.LayoutInflater.createView(LayoutInflater.java:513)
ERROR / AndroidRuntime(28111):在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
ERROR / AndroidRuntime(28111):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
ERROR / AndroidRuntime(28111):在android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
ERROR / AndroidRuntime(28111):在android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
ERROR / AndroidRuntime(28111):在android.view.LayoutInflater.inflate(LayoutInflater.java:407)
ERROR / AndroidRuntime(28111):在android.view.LayoutInflater.inflate(LayoutInflater.java:320)
ERROR / AndroidRuntime(28111):在my.package.MyClass.b(来源不明)
ERROR / AndroidRuntime(28111):在my.package.MyClass.a(来源不明)
ERROR / AndroidRuntime(28111):在my.package.MyClass.updateUI(来源不明)
ERROR / AndroidRuntime(28111):在my.package.MyClass.UpdateUITask.doInBackground(来源不明)
ERROR / AndroidRuntime(28111):在android.os.AsyncTask $ 2.call(AsyncTask.java:185)
ERROR / AndroidRuntime(28111):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
ERROR / 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(本机方法)
ERROR / AndroidRuntime(28111):在java.lang.reflect.Constructor.newInstance(Constructor.java:446)
ERROR / AndroidRuntime(28111):在android.view.LayoutInflater.createView(LayoutInflater.java:500)
ERROR / AndroidRuntime(28111):16 ...更多
ERROR / AndroidRuntime(28111):java.lang.RuntimeException的:所致。内螺纹已经不叫尺蠖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 ...更多
 

首先,这是怎么回事?主要是什么错误? 无法建立处理程序内螺纹已经不叫尺蠖prepare() android.view.InflateException:二进制XML文件中的行# 13:错误充气类<未知>

这似乎当我一个充气查看 XML的出现(R.layout.field_editable_label_value_numeric)13号线是:​​

 < EditText上机器人:ID =@ + ID / editableLabel
            机器人:layout_gravity =左| center_vertical
            机器人:layout_width =FILL_PARENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_marginRight =5DP
            机器人:layout_weight =1
            机器人:文字颜色=@彩色/黑白
            机器人:TEXTSTYLE =黑体/>
 

编辑:我忘了告诉我使用Proguard的,不知道是不是,不知怎的,在这个问题上(我不这么认为)的影响。

我还添加了code,我认为这个问题是发生了什么:

MyClass.a:

 最后LayoutInflater吹气=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
最后的ArrayList<视图>意见= MyClass.b(充气);

runOnUiThread(新的Runnable(){

        @覆盖
        公共无效的run(){
            的LinearLayout mainLayout =(的LinearLayout)findViewById(R.id.ItemLinearLayout);

            //简洁的UI
            mainLayout.removeAllViews();

            //重新设置所有意见
            对于(查看视图:观点){
                mainLayout.addView(视图);
            }
        }
}
 

MyClass.b:

 最后的ArrayList<视图> viewsToAdd =新的ArrayList<视图>();

查看查看= inflater.inflate(R.layout.field_editable_label_value_numeric,空,真正的);
viewsToAdd.add(视图);

返回意见;
 

解决方案

谢谢你的答案,但我得到的是这里最好的解释:<一href="http://stackoverflow.com/questions/6691311/inflate-a-view-in-a-background-thread/6692007#6692007">Inflate在后台线程期

基本上,它似乎是三星Galaxy S有一个的EditText 实现,其通货膨胀率只能在UI线程来完成。

希望这可以帮助别人谁运行到同样的问题。

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.view.InflateException:二进制XML文件中的行#13:错误充气类&lt;未知&GT;在三星Galaxy S的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆