2014-03-28 46 views
1

我正在开发一个android应用程序,我试图在资产文件夹中打开一个xml文件,该文件夹包含对位于资产文件夹中的图像的引用。我在一个非活动类中使用AssetManager,并试图将上下文传递给它的构造函数,但没有成功。Eclipse中没有错误,但是当我运行该应用程序时,它会被压缩。下面是我用于2个类和XML的代码。将上下文传递给非活动类以使用AssetManager.getAssets()

XML文件:

<scene> 

    <sprite> 
    <img src="100789.jpg" positionx="100" positiony="200" name="100789.jpg"/> 
    </sprite> 

    <sprite> 
    <img src="100788.jpg" positionx="2" positiony="20" name="100788" /> 
    </sprite> 

</scene> 

主类(活动)

import android.content.Context; 
.... 

public class Test extends AndroidGame { 

    Context context=getApplicationContext(); 

    @Override 
    public Screen getStartScreen() { 
     return new LoadingScreen(this, context); 
    } 
} 

装入类(屏幕)

import java.io.InputStream; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import org.w3c.dom.Document; 
import android.content.Context; 
import android.content.res.AssetManager; 
.... 

public class LoadingScreen extends Screen { 
    private Context context; 
    public Document doc; 

    public LoadingScreen(Game game, Context context) { 
    super(game); 
    this.context=context; 
} 

AssetManager gi = con.getAssets(); 

@Override 
public void update(float deltaTime) { 


try { 

    InputStream inStream = gi.open("assets.xml"); 
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
    Document doc = builder.parse(inStream); 
    doc.getDocumentElement().normalize(); 


}catch (Exception e) { 
    e.printStackTrace(); 
    } 


    Graphics g = game.getGraphics(); 
    Assets.background = g.newPixmap(doc.getDocumentElement().getElementsByTagName("sprite").item(0).getChildNodes().item(1).getAttributes().getNamedItem("name").getNodeValue(), PixmapFormat.RGB565); 
    .... 
    .... 
    game.setScreen(new MainMenuScreen(game)); 




} 

所以我做错了什么?

我也试图把下面的代码在构造,但没有成功:

public LoadingScreen(Game game, Context context) { 
    super(game); 
    this.context=context; 

AssetManager gi = con.getAssets(); 
try { 
    InputStream inStream = gi.open("assets.xml"); 
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
    Document doc = builder.parse(inStream); 
    doc.getDocumentElement().normalize(); 


}catch (Exception e) { 
    e.printStackTrace(); 
    } 
} 
+0

请张贴堆栈跟踪 –

回答

1

您试图访问context(该Context成员)你初始化之前,造成了NullPointerException

@Override 
public void update(float deltaTime) { 
    AssetManager gi = context.getAssets(); 
    ... 

} 
+0

应该是上下文 – Raghunandan

+0

@Raghunandan我不明白... – Blackbelt

+0

他'this.context' CON不delcared。我认为它有一个错字错误op我有 – Raghunandan

0

由于AndroidGame类从Activity你必须牢记的活性生命周期继承方法中移动AssetManager gi = con.getAssets();。一个活动没有Context,直到在onCreate()之前被调用并且在之前调用getApplicationContext()然后将返回null。所以你需要在onCreate中设置上下文字段。

基本上

public class Test extends AndroidGame { 

    private Context context; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     this.context = getApplicationContext(); 
    } 

    ... 

} 
相关问题