简体   繁体   中英

android.content.res.Resources$NotFoundException: File res/layout/action_menu_layout.xml from xml type layout resource ID #0x109001b

Not sure what the problem is exactly. I see action_menu_layout.xml in the logcat and I'm not sure where that came from. I don't see it listed in my androidmanifest.xml file. I suppose I need to remove this xml reference from somewhere but I'm not sure where to start?

Here is my main.java:

package com.smith.blackjack;

import android.os.Bundle;
import android.app.Activity;
import android.content.res.AssetManager;
import android.graphics.drawable.Drawable;

import java.io.IOException;
import java.io.InputStream;

import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class Main extends Activity {

private ImageView dealerCard0;
private ImageView dealerCard1;
private ImageView dealerCard2;
private ImageView dealerCard3;
private ImageView playerCard0;
private ImageView playerCard1;
private ImageView playerCard2;
private ImageView playerCard3;
private ImageView imgResult;
private Button btnDeal;
private Button btnDraw;
private Button btnHold;
private DeckOfCards deckOfCards;
private int[] dealerValues;
private int dealerSum;
private int dealerCardNumber;
private int[] playerValues;
private int playerSum;
private int playerCardNumber;
private InputStream dealerHiddenCard;
private Card dealerCard;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    dealerCard0 = (ImageView) findViewById(R.id.dealerCard0);
    dealerCard1 = (ImageView) findViewById(R.id.dealerCard1);
    dealerCard2 = (ImageView) findViewById(R.id.dealerCard2);
    dealerCard3 = (ImageView) findViewById(R.id.dealerCard3);

    playerCard0 = (ImageView) findViewById(R.id.playerCard0);
    playerCard1 = (ImageView) findViewById(R.id.playerCard1);
    playerCard2 = (ImageView) findViewById(R.id.playerCard2);
    playerCard3 = (ImageView) findViewById(R.id.playerCard3);

    imgResult = (ImageView) findViewById(R.id.imgResult);

    btnDeal = (Button) findViewById(R.id.deal);
    btnDraw = (Button) findViewById(R.id.draw);
    btnHold = (Button) findViewById(R.id.hold);

    btnDeal.setOnClickListener(btnDealListener);
    btnDraw.setOnClickListener(btnDrawListener);
    btnHold.setOnClickListener(btnHoldListener); 


    resetGame();

}

private void resetGame(){

    AssetManager assets = getAssets();
    dealerValues = new int[4];
    playerValues = new int[4];
    dealerSum = 0;
    playerSum = 0;
    dealerCardNumber = 0;
    playerCardNumber = 0;
    for (int i = 0; i < 4; i++) {
        dealerValues[i] = 0;
        playerValues[i] = 0;
    }

    try {
        InputStream stream; 
        stream = assets.open("cardback.png");
        Drawable cardImage = Drawable.createFromStream(stream,  "cardback");
        dealerCard0.setImageDrawable(cardImage);
        dealerCard1.setImageDrawable(cardImage);
        dealerCard2.setImageDrawable(cardImage);
        dealerCard3.setImageDrawable(cardImage);
        playerCard0.setImageDrawable(cardImage);
        playerCard1.setImageDrawable(cardImage);
        playerCard2.setImageDrawable(cardImage);
        playerCard3.setImageDrawable(cardImage);
        imgResult.setImageDrawable(cardImage);
        deckOfCards = new DeckOfCards();
        deckOfCards.shuffle();
        assets.close();
    }
    catch (IOException e){
        Log.e("Reset Game", "Error Loading", e);
    }
}

public OnClickListener btnDealListener = new OnClickListener()
{
//      @Override 
    public void onClick(View v) {


        try {
            AssetManager assets = getAssets();
            InputStream stream;

            // first player card
            Card newCard;
            newCard = deckOfCards.dealCard();
            playerValues[playerCardNumber] = newCard.faceValue;
            playerCardNumber++;             
            stream = assets.open(newCard.File);
            Drawable cardImage = Drawable.createFromStream(stream, newCard.File);
            playerCard0.setImageDrawable(cardImage);
            assets.close();

            // second player card
            newCard = deckOfCards.dealCard();
            playerValues[playerCardNumber] = newCard.faceValue;
            playerCardNumber++; 
            stream = assets.open(newCard.File);
            cardImage = Drawable.createFromStream(stream, newCard.File);
            playerCard1.setImageDrawable(cardImage);
            assets.close();

            // first dealer card hidden
            newCard = deckOfCards.dealCard();
            dealerCard = newCard;
            dealerValues[dealerCardNumber] = newCard.faceValue;
            dealerCardNumber++;
            dealerHiddenCard = assets.open(newCard.File);
            stream = assets.open("cardback.png");
            cardImage = Drawable.createFromStream(stream,  "cardback");
            dealerCard0.setImageDrawable(cardImage);
            assets.close();

            // second dealer card open
            newCard = deckOfCards.dealCard();
            dealerValues[dealerCardNumber] = newCard.faceValue;
            dealerCardNumber++;
            stream = assets.open(newCard.File);
            cardImage = Drawable.createFromStream(stream,  newCard.File);
            dealerCard1.setImageDrawable(cardImage);
            assets.close();
        }
        catch (IOException e){
            Log.e("Deal", "Error Loading", e);
        }

    };
};

public OnClickListener btnDrawListener = new OnClickListener()
{
//      @Override 
    public void onClick(View v) {
        try {
            AssetManager assets = getAssets();
            InputStream stream;

            // get next player card
            Card newCard;
            newCard = deckOfCards.dealCard();
            playerValues[playerCardNumber] = newCard.faceValue;
            playerCardNumber++;             
            stream = assets.open(newCard.File);
            Drawable cardImage = Drawable.createFromStream(stream, newCard.File);
            switch (playerCardNumber){
            case 3:
                playerCard2.setImageDrawable(cardImage);
            case 4:
                playerCard3.setImageDrawable(cardImage);
            }
            assets.close();
        }
        catch (IOException e){
            Log.e("Draw", "Error Loading", e);
        }
    };
};


public OnClickListener btnHoldListener = new OnClickListener()
{
//      @Override 
    public void onClick(View v) {
        Drawable cardImage;
        // evaluate player hand
        playerSum = evaluate(playerValues);
        if (playerSum > 21){
            // player losses
        }
        // flip over the dealer hidden card
        cardImage = Drawable.createFromStream(dealerHiddenCard, dealerCard.File);
        Card newCard;
        InputStream stream;
        AssetManager assets = getAssets();
        for (int i=2; i<4; i++){
            dealerSum = evaluate(dealerValues);
            if (dealerSum < 16 ) {
                newCard = deckOfCards.dealCard();
                dealerValues[dealerCardNumber] = newCard.faceValue;
                dealerCardNumber++;
                try {
                    stream = assets.open(newCard.File);
                    cardImage = Drawable.createFromStream(stream,  newCard.File);
                    switch (dealerCardNumber){
                    case 3:
                        dealerCard2.setImageDrawable(cardImage);
                    case 4:
                        dealerCard3.setImageDrawable(cardImage);
                    }
                    assets.close();
                }
                catch (IOException e){
                    Log.e("Draw", "Error Loading", e);
                } 
                if (dealerSum < playerSum) {
                    // player wins
                }
                if (dealerSum > playerSum){
                    // dealer wins
                }
                if (dealerSum == playerSum){
                    // it is a draw
                }
            }

        }


    };
};

public int evaluate (int[]values)   {
    int sumCards = 0;
    for (int i = 0; i < 4; i++){
        sumCards += values[i];
    }
    if (sumCards > 21) {
        for (int i = 0; i < 4; i++){
            if (values[i] == 11) {
                values[i] = 1;
                sumCards -= 10;
                continue;
            }
        }
    }
    return sumCards;
}

}

Here is my logcat:

10-15 21:59:08.448: E/AndroidRuntime(3070): FATAL EXCEPTION: main
10-15 21:59:08.448:E/AndroidRuntime(3070):android.content.res.Resources$NotFoundException: File res/layout/action_menu_layout.xml from xml type layout resource ID #0x109001b
10-15 21:59:08.448: E/AndroidRuntime(3070):     at android.content.res.Resources.loadXmlResourceParser(Resources.java:2145)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at android.content.res.Resources.loadXmlResourceParser(Resources.java:2100)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at android.content.res.Resources.getLayout(Resources.java:852)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at com.android.internal.view.menu.BaseMenuPresenter.getMenuView(BaseMenuPresenter.java:70)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at com.android.internal.view.menu.ActionMenuPresenter.getMenuView(ActionMenuPresenter.java:148)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at com.android.internal.widget.ActionBarView.setMenu(ActionBarView.java:427)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:385)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:747)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:2913)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at android.os.Handler.handleCallback(Handler.java:615)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at android.os.Looper.loop(Looper.java:137)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at android.app.ActivityThread.main(ActivityThread.java:4745)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at java.lang.reflect.Method.invokeNative(Native Method)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at java.lang.reflect.Method.invoke(Method.java:511)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at dalvik.system.NativeStart.main(Native Method)
10-15 21:59:08.448: E/AndroidRuntime(3070): Caused by: java.lang.RuntimeException: Assetmanager has been closed
10-15 21:59:08.448: E/AndroidRuntime(3070):     at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:485)
10-15 21:59:08.448: E/AndroidRuntime(3070):     at android.content.res.Resources.loadXmlResourceParser(Resources.java:2127)
10-15 21:59:08.448: E/AndroidRuntime(3070):     ... 18 more

Here is my AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.smith.blackjack"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="15" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".Main"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

Always check the root cause, ie the last exception in the chain:
Caused by: java.lang.RuntimeException: Assetmanager has been closed

You probably mess around with resources in the Java code, look around, or maybe something is wrong with the Activity lifecycle, anything "hacky" static?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM