Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将活动中的数据传递给SurfaceView_Java_Android_Surfaceview - Fatal编程技术网

Java 将活动中的数据传递给SurfaceView

Java 将活动中的数据传递给SurfaceView,java,android,surfaceview,Java,Android,Surfaceview,我不确定问题出在哪里。我想,如果该活动能够将信息传递给surfaceview,那么它将实现。基本上,我正在尝试这样做,当有人从主菜单中选择游戏布局时(有意地传递),它就会进入PlayGame类。(我让它取意向书中给出的数字)。该活动通过布局使用SurfaceView。然后在曲面视图中调用图像并分配它们,我尝试使用if-else来确定应该使用哪些图片。没用。不确定该怎么办。如果有更好的方法,请使用主页上以前选择的图像。看起来像这样 Main类(仅传递意图的按钮之一) 游戏课 @Override

我不确定问题出在哪里。我想,如果该活动能够将信息传递给surfaceview,那么它将实现。基本上,我正在尝试这样做,当有人从主菜单中选择游戏布局时(有意地传递),它就会进入PlayGame类。(我让它取意向书中给出的数字)。该活动通过布局使用SurfaceView。然后在曲面视图中调用图像并分配它们,我尝试使用if-else来确定应该使用哪些图片。没用。不确定该怎么办。如果有更好的方法,请使用主页上以前选择的图像。看起来像这样

Main类(仅传递意图的按钮之一)

游戏课

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);  
    Intent typ = getIntent();
    type = typ.getIntExtra("gameType", 0);

    setContentView(R.layout.game);        
    gameLoopView = (GameLoopView) findViewById(R.id.gnarlyned); 


}
游戏类别:

private void loadImages(Context context) {
            type = playGame.type;
    Resources res = context.getResources();

    if (type == 1){
        skyImage = BitmapFactory.decodeResource(res, R.drawable.sky);

    }
    else if (type == 2){
        skyImage = BitmapFactory.decodeResource(res, R.drawable.snowbg);

    }
图像不止一个,但为了节省空间,只有一个。任何帮助都将不胜感激。我肯定我在那里一定做错了什么

编辑:这是此设置导致的强制关闭的日志cat

06-06 17:55:01.655:错误/AndroidRuntime(16229):致命异常:主 06-06 17:55:01.655:ERROR/AndroidRuntime(16229):java.lang.RuntimeException:无法启动活动组件信息{fallacystudios.gnarlyned/fallacystudios.gnarlyned.PlayGame}:android.view.InflateException:二进制XML文件行#7:错误膨胀类FallacyStudiostudios.gnarlyned.GameLoopView 06-06 17:55:01.655:ERROR/AndroidRuntime(16229):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 06-06 17:55:01.655:错误/AndroidRuntime(16229):由以下原因引起:android.view.InflateException:二进制XML文件行#7:错误膨胀类fallacystudios.gnarlyned.GameLoopView 06-06 17:55:01.655:错误/AndroidRuntime(16229):由以下原因引起:java.lang.reflect.InvocationTargetException 06-06 17:55:01.655:错误/AndroidRuntime(16229):由以下原因引起:java.lang.NullPointerException

然后一大堆堆大小溢出


所有这些只有在loadImages部分中有if(gameType==1)和else if(gameType==2)时才会发生。这样做可以使选中该贴图时仅使用某些图像。不确定为什么不起作用。

如果从游戏构造函数调用了
loadImages
,那么问题是当您膨胀视图时,您还没有定义playGame.type。在调用
setContentView

之前,请尝试提取额外的意图。我已经完成了您尝试的操作。我的解决方案是在内部类中设置所有视图,然后动态地进行布局。这样,每个小部件/视图都可以看到其他小部件/视图在做什么。

PlayGame
类中将
类型设置为
public static
,并在调用Ted Hopp提到的
setContentView
之前调用intent extra。

什么实际上不起作用?我想我不明白确切的问题是什么。loadImage(Context)方法何时被调用?游戏类构造函数?从PlayGame gameLoopView对象?playGame.type是什么类型,是整数还是整数?@Joe loadImage在surfaceview的公共游戏(上下文)中被调用。在PlayGame中从onCreate调用surfaceview。playGame类型是一个int.@TedHopp-Dang,我认为这会起作用,但它仍然给我带来问题。不太清楚是什么。谢谢你,奇怪。您已经验证了PlayGame.onCreate中从intent中检索的类型肯定是从Main中传递的类型?如果是的话,它肯定不会出现在游戏中?(我通常使用非法值作为getIntExtra的默认值,这样我就知道是否正确调用了它。)@TedHopp Ya它与在main中传递的值相同。并且它是在setcontentview之前提取的。只是当我试着把它放在水面上的时候,它不会得到它。强制关闭(我将在上面发布日志)强制关闭是由第524行Game.loadImages中的NullPointerException引起的。我不知道那是哪一行,但看看你的代码,我觉得最可能的问题是调用loadImages时playGame还没有初始化。@TedHopp这很奇怪。我尝试在游戏中创建一个变量,在调用loadImages之前,我尝试将其设置为零,并将其设置为playGame.type。Stil给了我一个空指针异常。顺便问一下,我如何让它显示线的数字。我来看看那条线是什么。
private void loadImages(Context context) {
            type = playGame.type;
    Resources res = context.getResources();

    if (type == 1){
        skyImage = BitmapFactory.decodeResource(res, R.drawable.sky);

    }
    else if (type == 2){
        skyImage = BitmapFactory.decodeResource(res, R.drawable.snowbg);

    }