2012-02-12 15 views
5

Projemi çalıştırmaya çalışırken hata mesajı alıyorum. Android için Tic Tac Toe oluşturmak istiyor ve aşağıda Tic Tac Toe kurulu oluşturmak için özel Görünüm kullanın:android.view.InflateException: İkili XML dosya satırı # 7: Sınıf şişirilirken hata oluştu

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; //Abstract class to create tiles in Tic Tac Toe Board 
    int boardWidth = 3; //It mean Tic Tac Toe board is consists of 3x3 tiles 
    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 is extend class from Tile. 
       // TileEmpty represent empty tile in Tic Tac Toe 
      } 
     } 
    } 
} 

Sonraki, böyle XML tabanlı etkinlik düzeni yerleştirmek:

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

    <org.me.TicTacToe.ui.TicTacToeBoard 
     android:id="@+id/game1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

Yani benim Eclipse LogCat penceresinde önemli özel durum hatası alıyorum:

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 

Nasıl düzeltmek için?

Tam Logcat hatları:

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

, bize LogCat diğer satırları gösterin. Kazanın nedeninin daha önce bir yönetim kurulu kurucusunun bir yerinde listelendiğine inanıyorum. – Olegas

+0

@Olegas, tam logcat satırlarım. Cevabınız için ilk mesajıma – Spongeboss

cevap

27

Sen TicTacToeBoard(Context, Attributeset) için yapıcı kaçırıyorsun. Örneğin, this question.

DÜZENLEME: Bu sadece yayınlanmıştır LogCat doğru var:

Caused by: java.lang.NoSuchMethodException: TicTacToeBoard(Context,AttributeSet) 
+0

thank ekledim, gerçekten işe yarıyor! 2 gün başım ağrıyor – Spongeboss

+2

@Spongeboss lütfen doğru cevabı kabul edin. thnx ... "Caused by" maddesini görmeyi istemek için :) –

+0

+ 1 çalıştı. Benimki "ClassNotFound İstisnası" idi ve neden benim sınıf ismimi yanlış yazdım? –