android.view.InflateException: 二进制XML文件第7行:解析类错误

7 浏览
0 Comments

android.view.InflateException: 二进制XML文件第7行:解析类错误

我在尝试运行我的项目时遇到了错误信息。我想要创建一个适用于Android的井字棋游戏,我使用下面的自定义视图创建了井字棋棋盘:

package org.me.TicTacToe.ui;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.view.View;
public class TicTacToeBoard extends View {
    private Tile[][] tile = null;   //用于创建井字棋棋盘方格的抽象类
    int boardWidth = 3; //这意味着井字棋棋盘由3x3个方格组成
    private int width;
    private int height;
    private Paint brush;
    public TicTacToeBoard(Context context) {
        super(context);
        brush = new Paint();
        this.brush.setARGB(255, 0, 0, 0);
        this.brush.setAntiAlias(true);
        this.brush.setStyle(Style.STROKE);
        this.brush.setStrokeWidth(5);
        width = this.getWidth();
        height = this.getHeight();
        initBoard();
    }
    @Override
    protected void onDraw(Canvas canvas) {
        for (int i = 0; i < tile.length; i++) {
            for (int j = 0; j < tile[0].length; j++) {
                tile[i][j].draw(canvas, getResources(), j, i,
                    (this.getWidth() + 3) / tile.length,
                    this.getHeight() / tile[0].length);
            }
        }
        int xs = this.getWidth() / boardWidth;
        int ys = this.getHeight() / boardWidth;
        for (int i = 0; i <= boardWidth; i++) {
            canvas.drawLine(xs * i, 0, xs * i, this.getHeight(), brush);
        }
        for (int i = 0; i <= boardWidth; i++) {
            canvas.drawLine(0, ys * i, this.getWidth(), ys * i, brush);
        }
        super.onDraw(canvas);
    }
    public void initBoard(){
        tile = new Tile[boardWidth][boardWidth];
        int xss = width / boardWidth;
        int yss = height / boardWidth;
        for (int row = 0; row < boardWidth; row++) {
            for (int colmn = 0; colmn < boardWidth; colmn++) {
                tile[row][colmn] = new TileEmpty(xss * colmn, row * yss);
                // TileEmpty是Tile的子类,表示井字棋中的空方格
            }
        }
    }
}

接下来,我将它放入基于XML的活动布局中,如下所示:



    

所以我在Eclipse的LogCat窗口中得到了致命异常错误:

AndroidRuntime(329): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.me.TicTacToe/org.me.TicTacToe.ui.TicTacToeActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class org.me.TicTacToe.ui.TicTacToeBoard

如何修复它?

完整的Logcat行:

02-12 10:22:31.989: D/AndroidRuntime(329): Shutting down VM
02-12 10:22:31.989: W/dalvikvm(329): threadid=1: thread exiting with uncaught exception (group=0x40015560)
02-12 10:22:32.008: E/AndroidRuntime(329): FATAL EXCEPTION: main
02-12 10:22:32.008: E/AndroidRuntime(329): java.lang.RuntimeException:
                    Unable to start activity ComponentInfo{org.me.TicTacToe/org.rme.TicTacToe.ui.TicTacToeActivity}:
                    android.view.InflateException: Binary XML file line #18: Error inflating class org.me.TicTacToe.ui.TicTacToeBoard
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.os.Looper.loop(Looper.java:123)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.app.ActivityThread.main(ActivityThread.java:3683)
02-12 10:22:32.008: E/AndroidRuntime(329):  at java.lang.reflect.Method.invokeNative(Native Method)
02-12 10:22:32.008: E/AndroidRuntime(329):  at java.lang.reflect.Method.invoke(Method.java:507)
02-12 10:22:32.008: E/AndroidRuntime(329):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-12 10:22:32.008: E/AndroidRuntime(329):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-12 10:22:32.008: E/AndroidRuntime(329):  at dalvik.system.NativeStart.main(Native Method)
02-12 10:22:32.008: E/AndroidRuntime(329): Caused by: android.view.InflateException: Binary XML file line #7:
                    Error inflating class org.me.TicTacToe.ui.TicTacToeBoard
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.view.LayoutInflater.createView(LayoutInflater.java:508)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
02-12 10:22:32.008: E/AndroidRuntime(329):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.app.Activity.setContentView(Activity.java:1657)
02-12 10:22:32.008: E/AndroidRuntime(329):  at org.me.TicTacToe.ui.TicTacToeActivity.onCreate(TicTacToeActivity.java:24)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-12 10:22:32.008: E/AndroidRuntime(329):  ... 11 more
02-12 10:22:32.008: E/AndroidRuntime(329): Caused by: java.lang.NoSuchMethodException: TicTacToeBoard(Context,AttributeSet)
02-12 10:22:32.008: E/AndroidRuntime(329):  at java.lang.Class.getMatchingConstructor(Class.java:643)
02-12 10:22:32.008: E/AndroidRuntime(329):  at java.lang.Class.getConstructor(Class.java:472)
02-12 10:22:32.008: E/AndroidRuntime(329):  at android.view.LayoutInflater.createView(LayoutInflater.java:480)
02-12 10:22:32.008: E/AndroidRuntime(329):  ... 21 more

0
0 Comments

文章标题:解决Android中出现的错误类充气异常问题

在Android开发过程中,有时候会遇到一个名为"android.view.InflateException: Binary XML file line #7: Error inflating class"的错误。这个错误通常是由于缺少构造函数导致的。我们可以通过以下步骤解决这个问题。

首先,根据LogCat中的提示信息,我们可以看到错误的具体原因是"Caused by: java.lang.NoSuchMethodException: TicTacToeBoard(Context,AttributeSet)"。这意味着在TicTacToeBoard类中找不到带有(Context, AttributeSet)参数的构造函数。

根据这个原因,我们需要在TicTacToeBoard类中添加一个构造函数,参数为(Context, AttributeSet)。这样可以解决缺少构造函数的问题,从而解决错误类充气异常。

以下是添加构造函数的示例代码:

public TicTacToeBoard(Context context, AttributeSet attrs) {
    super(context, attrs);
    // 这里可以添加其他需要的代码
}

通过添加这个构造函数,我们可以确保在充气TicTacToeBoard类时能够正确初始化实例,并解决错误类充气异常问题。

最后,我们可以看到一些开发者在回答问题时表示,添加构造函数的方法确实解决了他们的问题,结束了长达两天的头疼。因此,我们可以确认这个解决方法的有效性。

,当在Android开发中遇到"android.view.InflateException: Binary XML file line #7: Error inflating class"错误时,可以通过添加缺少的构造函数来解决问题。这个错误通常是由于缺少构造函数导致的,通过添加构造函数可以正确初始化实例,从而解决错误类充气异常。希望这篇文章对解决这个问题有所帮助。

0