java - 二进制 XML 文件行 # : Error inflating class <unknown> using an ArrayAdapter and AsyncTask

标签 java android android-asynctask android-arrayadapter

所以我收到此错误消息:

...
android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class <unknown>
Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class <unknown>
Caused by: java.lang.reflect.InvocationTargetException
...

在MainActivity.java

public void onWindowFocusChanged(boolean hasFocus) {
    ...
    loadBalanceTable(inThePast, inTheFuture);
    ...
}

private void loadBalanceTable(Calendar startDate, Calendar endDate) {
    AsyncBalanceLoader asyncBalanceLoader = new AsyncBalanceLoader(getApplicationContext(), this);
    asyncBalanceLoader.execute(startDate, endDate);
}

AsyncBalanceLoader.java

public class AsyncBalanceLoader extends AsyncTask<Calendar, Integer, ArrayList<Balance>> {

    private Context context;
    private AppCompatActivity activity;
    private ListView balanceView;

    public AsyncBalanceLoader(Context ctx, AppCompatActivity act) {
        context = ctx;
        activity = act;
    }

    @Override
    protected ArrayList<Balance> doInBackground(Calendar... date) {
        ...
        ArrayList<Balance> arrayListBalance = new ArrayList<Balance>();
        ...
        return arrayListBalance;
    }

    @Override
    protected void onPostExecute(ArrayList<Balance> arrayListBalance) {
        BalanceArrayAdapter balanceArrayAdapter = new BalanceArrayAdapter(context, arrayListBalance);
        balanceView.setAdapter(balanceArrayAdapter);
    }
}

BalanceArrayAdapter.java

public class BalanceArrayAdapter extends ArrayAdapter {

    public BalanceArrayAdapter(Context context, ArrayList<Balance> balance) {
        super(context, 0, balance);
    }

    @NonNull
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ...
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(
                R.layout.single_balance_line, parent, false);
        }
        ...
        return convertView;

    }
}

BalanceArrayAdapter.java上线时出现问题

convertView = LayoutInflater.from(getContext()).inflate(
                    R.layout.single_balance_line, parent, false);

当所有这些都在用户界面线程上完成时,我没有遇到任何问题。

对正在发生的事情有什么想法吗? 非常感谢!

最佳答案

我通过剖析错误代码找出了导致错误的原因

...
android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class <unknown>
...

奇怪的是,当整个过程在 UI 线程下运行时(在程序的早期版本上),这个 xml 布局文件会正确地膨胀;但是,当它在 AsyncTask 扩展类 AsyncBalanceLoaderonPostExecute() 上膨胀时,尽管 UI 线程也是如此,但我收到了错误。这是有问题的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_height="wrap_content"
            android:layout_width="0dp"
            android:layout_weight="1">

            ...

        </LinearLayout>

        ...

    </LinearLayout>
</LinearLayout>

第二个 LinearLayout 不执行任何操作,第一个(也称为 Root View )仅包含一个 subview ,违背了 LinearLayout 组 View 的目的。

所以,我真的不知道所说的“错误”在哪里,但这就是原因。

我将其更改为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    <LinearLayout
        android:orientation="horizontal"
        android:layout_height="wrap_content"
        android:layout_width="0dp"
        android:layout_weight="1">

        ...

    </LinearLayout>

    ...

</LinearLayout>

希望稍后有人能解释真正原因的深层原因。

关于java - 二进制 XML 文件行 # : Error inflating class <unknown> using an ArrayAdapter and AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40541274/

相关文章:

java - 从 asyncTask 中的异常访问 View 时出现问题

java - 更改 JSON 对象 Android 中的 Name() 值

android - Hybrid Cordova应用程序:Android上本地没有声音

android - 关于安卓的多语言应用?

android - Worker 类内部调用 BroadcastReceiver 类

Android 应用程序在单独文件中调用函数时崩溃

Android loopj + GCMIntentService 在死线程上向处理程序发送消息

java - 覆盖库对 "R.style.someTheme"的引用

java - 协调器布局 : View disappears with custom behavior

java - 类型 Logger 中的编译错误 : The method error(String, Object, Object) 不适用于参数