2014-03-13 46 views
-1

調試一個android項目我收到錯誤「IllegalStateException:無法執行活動的方法」。「IllegalStateException:無法執行活動的方法」和「二進制XML文件行#8:錯誤膨脹類」

我在這個網站和其他人的研究,我發現了很多類似的問題,但我無法將建議的解決方案應用於我的情況。

你能幫我嗎?甚至給我鏈接教程,指南等,但如果有人認爲我不值得幫助,請解釋我的理由,以便我可以學習。

package nv.bao; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.widget.Switch; 

public class BaoActivity extends Activity{ 
private MediaPlayer menuSong; 
private RadioGroup numberStartingStones; 
private int startingStoneCount; 
private boolean singlePlayer=false; 
private BaoView bView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onC reate(savedInstanceState); 
    menuSong = MediaPlayer.create(KahlaActivity.this, R.raw.planescape2); 
    setContentView(R.layout.activity_bao); 
    startingStoneCount=10; 
    numberStartingStones=(RadioGroup) findViewById(R.id.radioGroup1); 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_bao, menu); 
    return true; 
} 


// Called when the user clicks the Start button. This will set the board view. 
public void startGame(View view){ 
    setContentView(R.layout.baoboard); 
    bView = (BaoView) findViewById(R.id.baoboard); 
    } 

這是寫在錯誤是由 「BaoActivity.java:50」 引起了logcat的

03-13 04:56:24.758: D/AndroidRuntime(2522): Shutting down VM 
03-13 04:56:24.758: W/dalvikvm(2522): threadid=1: thread exiting with uncaught exception (group=0x41465700) 
03-13 04:56:24.878: E/AndroidRuntime(2522): FATAL EXCEPTION: main 
03-13 04:56:24.878: E/AndroidRuntime(2522): java.lang.IllegalStateException: Could not execute method of the activity 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.view.View$1.onClick(View.java:3633) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.view.View.performClick(View.java:4240) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.view.View$PerformClick.run(View.java:17721) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.os.Handler.handleCallback(Handler.java:730) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.os.Looper.loop(Looper.java:137) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.app.ActivityThread.main(ActivityThread.java:5103) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at java.lang.reflect.Method.invokeNative(Native Method) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at java.lang.reflect.Method.invoke(Method.java:525) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at dalvik.system.NativeStart.main(Native Method) 
03-13 04:56:24.878: E/AndroidRuntime(2522): Caused by: java.lang.reflect.InvocationTargetException 
03-13 04:56:24.878: E/AndroidRuntime(2522): at java.lang.reflect.Method.invokeNative(Native Method) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at java.lang.reflect.Method.invoke(Method.java:525) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.view.View$1.onClick(View.java:3628) 
03-13 04:56:24.878: E/AndroidRuntime(2522): ... 11 more 
03-13 04:56:24.878: E/AndroidRuntime(2522): Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class nv.bao.BaoView 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.view.LayoutInflater.createView(LayoutInflater.java:603) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.app.Activity.setContentView(Activity.java:1895) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at com.example.kahla.KahlaActivity.startGame(BaoaActivity.java:50) 
03-13 04:56:24.878: E/AndroidRuntime(2522): ... 14 more 
03-13 04:56:24.878: E/AndroidRuntime(2522): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 
03-13 04:56:24.878: E/AndroidRuntime(2522): at java.lang.Class.getConstructorOrMethod(Class.java:423) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at java.lang.Class.getConstructor(Class.java:397) 
03-13 04:56:24.878: E/AndroidRuntime(2522): at android.view.LayoutInflater.createView(LayoutInflater.java:568) 
03-13 04:56:24.878: E/AndroidRuntime(2522): ... 22 more 
03-13 04:56:30.088: I/Process(2522): Sending signal. PID: 2522 SIG: 9 

setContentView(R.layout.baoboard); 

Binary XML file line #8: Error inflating class nv.bao.BaoView 

我的XML文件如下:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="fill_parent" 
android:background="@drawable/background" 
android:orientation="horizontal" > 

<nv.bao.BaoView 
     android:id="@+id/baoboard" 
      android:layout_width="match_parent" 
        android:layout_height="match_parent" 
       /> 

     <Button 
      android:id="@+id/quitInGame" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentTop="true" 
      android:onClick="quitGame" 
      android:text="@string/menu_button_quit" /> 

</RelativeLayout> 

非常感謝您的關注, 尼諾V

編輯:

我需要傳遞給BaoView字符串包含每個坑的種子的初始數量。我想這樣做作爲評價參數:

public class BaoView extends View { 

private BaoGame game; 
private int pitSelected = -1; 
private boolean eventOccured; 
private static String apertura; 
private Point[] pitLocation = new Point[34]; 
private int[] semeTracker = new int[34]; 
private Random generator = new Random(); 
private boolean buttonClicked; 
private int playerIndex = 0; 
private Bitmap[] imageMap = new Bitmap[8]; 
private long mMoveDelay = 70; 
private long mLastMove; 
private RefreshHandler mRedrawHandler = new RefreshHandler(); 
private String sud = getResources().getString(R.string.player1pit); 
private String nord = getResources().getString(R.string.player2pit); 

public BaoView(Context context, AttributeSet attrs /*, String strIniziale */) { 
    super(context, attrs); 
    game = new BaoGame(/* strIniziale */); 
    init(/* strIniziale */); 
} 
public void init(/* String strIniziale */) { 
    setFocusable(true); 

    loadPitLocations(/* strIniziale */); 
    loadImages(); 
    this.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      float x1 = 0, x2, y1 = 0, y2, dx, dy; 
      int d = 0; // direction; 
      switch (event.getAction()) { 
       case (MotionEvent.ACTION_DOWN): 
        x1 = event.getX(); 
        y1 = event.getY(); 
        break; 
       case (MotionEvent.ACTION_UP): 
        x2 = event.getX(); 
        y2 = event.getY(); 
        dx = x2 - x1; 
        dy = y2 - y1; 
        if (Math.abs(dx) > Math.abs(dy)) { 
         if (dx > 0) { 
          d = 1; 
         } else { 
          d = -1; 
         } 
        } 
        break; 
       default: 
        return false; 
      } 
      if (buttonListener(x1, y1)) { 
       game.doTurn(pitSelected, d); 
       playerIndex = game.getCurrentPlayerIndex(); 
       eventOccured = true; 
       update(); 
      } 
      return true; 
     } 
    }); 
} 

public boolean buttonListener(float x, float y) { 
    buttonClicked = false; 
    if (playerIndex == 0) { 
     for (int i = 0; i <= 15; i++) { 
      if (x >= pitLocation[i].x 
        && x <= pitLocation[i].x + 100 
        && y >= pitLocation[i].y 
        && y <= pitLocation[i].y + 100 
        && semeTracker[i] != 0) { 
       buttonClicked = true; 
       pitSelected = i; 
       break; 
      } 
     } 
    } 
    if (playerIndex == 1) { 
     for (int i = 16; i <= 31; i++) { 
      if (x >= pitLocation[i].x 
        && x <= pitLocation[i].x + 100 
        && y >= pitLocation[i].y 
        && y <= pitLocation[i].y + 100 
        && semeTracker[i] != 0) { 
       buttonClicked = true; 
       pitSelected = (i - 16); 
       break; 
      } 
     } 
    } 
    return buttonClicked; 
} 

public void loadImages() { 
    Resources r = this.getContext().getResources(); 
    loadImage(0, r.getDrawable(R.drawable.seme), 15, 15); 
    loadImage(1, r.getDrawable(R.drawable.buca), 70, 100); 
    loadImage(2, r.getDrawable(R.drawable.granaio), 70, 200); 
    loadImage(3, r.getDrawable(R.drawable.tavola), 700, 400); 
    loadImage(4, r.getDrawable(R.drawable.mucchio), 70, 100); 
    loadImage(5, r.getDrawable(R.drawable.playerone), 325, 75); 
    loadImage(6, r.getDrawable(R.drawable.playertwo), 325, 75); 
    loadImage(7, r.getDrawable(R.drawable.tavola), 700, 400); 
} 

public void loadPitLocations(/* String strIniziale */) { 
    int W = this.getWidth(); // 800 
    int H = this.getHeight(); //404 

    String[] separati = strIniziale.split("\\:"); 
    String HALI=separati[7]; 
    String[] aHali=HALI.split("-"); 
    String[] aPlayer = new String[34]; 
    aPlayer[0] = aHali[16]; 
    aPlayer[10] = aHali[3]; 
    aPlayer[11] = aHali[4]; 
    aPlayer[12] = aHali[5]; 
    aPlayer[13] = aHali[6]; 
    aPlayer[14] = aHali[7]; 
    aPlayer[15] = aHali[8]; 
    aPlayer[16] = aHali[0]; // ghala 
    aPlayer[1] = aHali[15]; 
    aPlayer[2] = aHali[14]; 
    aPlayer[3] = aHali[13]; 
    aPlayer[4] = aHali[12]; 
    aPlayer[5] = aHali[11]; 
    aPlayer[6] = aHali[10]; 
    aPlayer[7] = aHali[9]; 
    aPlayer[8] = aHali[1]; 
    aPlayer[9] = aHali[2]; 

    aPlayer[19] = separati[8]; // Data 
    aPlayer[17] = separati[6]; // Kutakatia 
    aPlayer[18] = separati[7]; // Name 
    aPlayer[20] = separati[9]; // Nyumba 

    aPlayer[17] = aHali[17]; 
    aPlayer[18] = aHali[18]; 
    aPlayer[19] = aHali[19]; 
    aPlayer[20] = aHali[20]; 
    aPlayer[21] = aHali[21]; 
    aPlayer[22] = aHali[22]; 
    aPlayer[23] = aHali[23]; 
    aPlayer[24] = aHali[24]; 
    aPlayer[25] = aHali[32]; 
    aPlayer[26] = aHali[31]; 
    aPlayer[27] = aHali[30]; 
    aPlayer[28] = aHali[29]; 
    aPlayer[29] = aHali[28]; 
    aPlayer[30] = aHali[27]; 
    aPlayer[31] = aHali[26]; 
    aPlayer[32] = aHali[25]; 
    aPlayer[33] = aHali[33]; // ghala 

    aPlayer[39] = separati[10]; // Kutakatia 
    aPlayer[40] = separati[3]; // Name 
    aPlayer[19] = separati[4]; // Data 
    aPlayer[20] = separati[5]; // Nyumba 
    for (int i = 0; i <= 33; i++) { 
     semeTracker[i] = Integer.valueOf(aPlayer[i]); 
    } 

    for (int i = 0; i <= 7; i++) { // bene 
     pitLocation[i] = createPoint((574 - (i * 71)), 95); 
    } 

    for (int i = 8; i <= 15; i++) { // bene 
     pitLocation[i] = createPoint((77 + ((i - 8) * 71)), 0); 
    } 

    for (int i = 16; i <= 23; i++) { 
     pitLocation[i] = createPoint((70 + ((i - 16) * 71)), 210); 

    } 
    for (int i = 24; i <= 31; i++) { 
     pitLocation[i] = createPoint((567 - ((i - 24) * 71)), 300); 
    } 

    pitLocation[32] = createPoint(0, 0); // bene 
    pitLocation[33] = createPoint(630, 200); 
} 

public Point createPoint(int x, int y) { 
    Point location = new Point(); 
    location.set(x, y); 
    return location; 
} 


public void loadImage(int key, Drawable tile, int width, int height) { 
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    tile.setBounds(0, 0, width, height); 
    tile.draw(canvas); 
    imageMap[key] = bitmap; 
} 

public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    int W = this.getWidth(); 
    int H = this.getHeight();//404 
    Paint paint = new Paint(); 
    paint.setTextSize(15); 
    paint.setARGB(255, 255, 255, 0); 
    canvas.drawBitmap(imageMap[3], 10, 0, null); // Tavola 
    int[] aXCoord = {14, 15, 19, 20, 24, 33, 33, 39, 28, 35, 37, 46, 51, 48, 52}; 
    int[] aYCoord = {53, 40, 65, 27, 75, 20, 34, 47, 54, 80, 66, 24, 63, 37, 50}; 
    ArrayList<Integer> posSemiB = new ArrayList<Integer>(); 
    for (int i = 0; i <= 14; i++) { 
     posSemiB.add(i); 
    } 
    for (int i = 0; i <= 31; i++) {  //draw player1 pits 
     int n = 0; 
     if (semeTracker[i] > 0 && semeTracker[i] < 15) { 
      Collections.shuffle(posSemiB); 
      for (int x = 0; x < semeTracker[i]; x++) { 
       // semi 
       canvas.drawBitmap(imageMap[0], 
         (pitLocation[i].x - 10 + aXCoord[posSemiB.get(x)]), // aXCoord[coord]), 
         (pitLocation[i].y - 10 + aYCoord[posSemiB.get(x)]), // aYCoord[coord]), 
         null); 
      } 
     } else if (semeTracker[i] >= 15) { 
      // 'mucchio'= >12 
      canvas.drawBitmap(imageMap[4], 
        (pitLocation[i].x + 7), 
        (pitLocation[i].y - 5), 
        null); 
      paint.setTextSize(32); 
      canvas.drawText("" + semeTracker[i], pitLocation[i].x + 15, 
        pitLocation[i].y + 50, 
        paint); 
     } 
    } 
    int[] aXCoordG = {34, 25, 28, 47, 13, 50, 30, 12, 50, 42, 18, 52, 12, 29, 41, 15, 50, 40, 25, 20, 42, 13}; 
    int[] aYCoordG = {97, 116, 78, 118, 95, 86, 138, 76, 100, 62, 60, 138, 130, 44, 154, 150, 47, 29, 165, 26, 169, 42}; 
    ArrayList<Integer> posSemiG = new ArrayList<Integer>(); 
    for (int i = 0; i <= 21; i++) { 
     posSemiG.add(i); 
    } 
    paint.setTextSize(40); 
    paint.setARGB(255, 255, 0, 0); 
    Collections.shuffle(posSemiG); 
    for (int x = 0; x < semeTracker[32]; x++) { 
     canvas.drawBitmap(imageMap[0], 
       (pitLocation[32].x + 8 + aXCoordG[posSemiG.get(x)]), // aXCoord[coord]), 
       (pitLocation[32].y - 5 + aYCoordG[posSemiG.get(x)]), // aXCoord[coord]), 
       null); 
    } 
    canvas.drawText("|" + semeTracker[32], pitLocation[32].x +8, pitLocation[33].y + 280, paint); 
    paint.setARGB(255, 0, 0, 255); 
    Collections.shuffle(posSemiG); 
    for (int x = 0; x < semeTracker[33]; x++) { 
     canvas.drawBitmap(imageMap[0], 
       (pitLocation[33].x + aXCoordG[posSemiG.get(x)]), // aXCoord[coord]), 
       (pitLocation[33].y - 5 + aYCoordG[posSemiG.get(x)]), // aXCoord[coord]), 
       null); 
    } 
    canvas.drawText("|" + semeTracker[33], pitLocation[33].x + 18, pitLocation[33].y + 280, paint); 


    if (game.isDone()) { 
     // Bao Hamna 
     canvas.drawBitmap(imageMap[7], 300, 0, null); 
    } else { 
     if (playerIndex == 0) { 
      paint.setARGB(255, 255, 255, 0); 
      canvas.drawText(sud, 300, 0, paint); 
     } else if (playerIndex == 1) { 
      paint.setARGB(255, 255, 255, 0); 
      canvas.drawText(nord, 300, 0, paint); 
     } 
    } 
} 

public void setStarting(String x) { 
    Log.d("X=",x); 
    this.apertura = x; 
    Log.d("a-X=",this.apertura); 
} 

public String getStarting() { 
    Log.d("Apertura=",this.apertura); 
    return this.apertura; 
} 

public void updateSemeCounts() { 
    int[] temp = new int[6]; 
    for (int i = 0; i <= 1; i++) { 
     if (i == 0) { 
      for (int x = 0; x <= 5; x++) { 
       temp = game.getPitsCounts(i); 
       semeTracker[x] = temp[x]; 
      } 
     } 
     if (i == 1) { 
      for (int x = 0; x <= 5; x++) { 
       temp = game.getPitsCounts(i); 
       semeTracker[x + 6] = temp[x]; 
      } 
     } 
    } 
    semeTracker[12] = game.getScore(0); 
    semeTracker[13] = game.getScore(1); 
} 

public void update() { 
    if (eventOccured) { 
     long now = System.currentTimeMillis(); 
     if (now - mLastMove > mMoveDelay) { 
      updateSemeCounts(); 
      mLastMove = now; 
      eventOccured = false; 
     } 
     mRedrawHandler.sleep(mMoveDelay); 
    } 

} 
class RefreshHandler extends Handler { 

    private Point startPoint, endPoint, movePoint; 

    public void handleMessage(Message msg) { 
     BaoView.this.update(); 
     BaoView.this.invalidate(); 
    } 

    public void sleep(long delayMillis) { 
     this.removeMessages(0); 
     sendMessageDelayed(obtainMessage(0), delayMillis); 
    } 
}; 

}

+0

無論baoview是,似乎是原因。此外,爲什麼佈局應該看起來像? boaview佔據了所有的父空間,但你添加了一個按鈕。可能想使用framelayout。 –

+0

發佈'寶視' – Blackbelt

+0

@丹尼爾波:佈局顯示一個mancala板(鮑)與行每個8坑,每個坑應該是一些種子。我認爲你說對的原因是寶視,如果我試圖傳遞給它一個參數。但我不明白該怎麼做,所以我在調用這個類時刪除了這個參數,而不是在這個類中。你能幫我理解如何傳遞這個參數嗎? –

回答

1
Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 

你需要ContextAttributeSet在構造函數中的BaoView

public BaoView(Context context, AttributeSet attr) { 

    } 
相關問題