Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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 在android应用程序中尝试将多个布局堆叠到活动中,不断崩溃_Java_Android_Eclipse_Imageview_Android Framelayout - Fatal编程技术网

Java 在android应用程序中尝试将多个布局堆叠到活动中,不断崩溃

Java 在android应用程序中尝试将多个布局堆叠到活动中,不断崩溃,java,android,eclipse,imageview,android-framelayout,Java,Android,Eclipse,Imageview,Android Framelayout,我已经决定尝试为我放置在背景图像上的船对象(imageView)制作一个单独的布局 这样做的原因是,我希望在单击person时能够将person对象附加到boat对象 这样,当单击boat对象时,person对象将随之移动。我曾尝试根据我在网上找到的内容编写代码,以编程方式添加布局,但应用程序不断崩溃 以下是主要活动: package com.cannibal_photographer; import android.app.Activity; import android.os.Bundle

我已经决定尝试为我放置在背景图像上的船对象(imageView)制作一个单独的布局

这样做的原因是,我希望在单击person时能够将person对象附加到boat对象

这样,当单击boat对象时,person对象将随之移动。我曾尝试根据我在网上找到的内容编写代码,以编程方式添加布局,但应用程序不断崩溃

以下是主要活动:

package com.cannibal_photographer;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import android.widget.RelativeLayout;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 
    FrameLayout boatlayout = new FrameLayout(this);
    Boat boatobject = (Boat)findViewById(R.id.boatimageView);   
    //Person personobject = (Person)findViewById(R.id.personView1);
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    boatlayout.addView(boatobject, params);
    RelativeLayout.LayoutParams parentParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);           
    this.addContentView(boatlayout,parentParams);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
}
这是主要布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@layout/activity_main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

        <com.cannibal_photographer.Person
            android:id="@+id/personView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="250dp" 
            android:gravity="center_vertical"
            android:src="@drawable/greensquare" />

</RelativeLayout>

以下是boatlayout.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/framelayoutView"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.cannibal_photographer.Boat
    android:id="@+id/boatimageView"
    android:layout_width="78dp"
    android:layout_height="130dp"
    android:layout_marginLeft="105dp"
    android:layout_marginTop="180dp"
    android:src="@drawable/boat" />
</FrameLayout>

最后是堆栈跟踪:

10-17 08:50:03.761: E/AndroidRuntime(2283): FATAL EXCEPTION: main
10-17 08:50:03.761: E/AndroidRuntime(2283): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cannibal_photographer/com.cannibal_photographer.MainActivity}: java.lang.NullPointerException
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.os.Looper.loop(Looper.java:137)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.app.ActivityThread.main(ActivityThread.java:5041)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at java.lang.reflect.Method.invokeNative(Native Method)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at java.lang.reflect.Method.invoke(Method.java:511)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at dalvik.system.NativeStart.main(Native Method)
10-17 08:50:03.761: E/AndroidRuntime(2283): Caused by: java.lang.NullPointerException
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.view.ViewGroup.addViewInner(ViewGroup.java:3338)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.view.ViewGroup.addView(ViewGroup.java:3210)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.view.ViewGroup.addView(ViewGroup.java:3186)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at com.cannibal_photographer.MainActivity.onCreate(MainActivity.java:20)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.app.Activity.performCreate(Activity.java:5104)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
10-17 08:50:03.761: E/AndroidRuntime(2283):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
10-17 08:50:03.761: E/AndroidRuntime(2283):     ... 11 more
10-17 08:53:04.651: E/Trace(2381): error opening trace file: No such file or directory (2)
10-17 08:53:05.611: D/dalvikvm(2381): GC_FOR_ALLOC freed 37K, 6% free 2556K/2712K, paused 96ms, total 98ms
10-17 08:53:05.631: I/dalvikvm-heap(2381): Grow heap (frag case) to 5.245MB for 2764816-byte allocation
10-17 08:53:05.681: D/dalvikvm(2381): GC_FOR_ALLOC freed 2K, 3% free 5254K/5416K, paused 45ms, total 45ms
10-17 08:53:05.731: D/dalvikvm(2381): GC_CONCURRENT freed <1K, 3% free 5264K/5416K, paused 4ms+14ms, total 50ms
10-17 08:53:05.731: D/AndroidRuntime(2381): Shutting down VM
10-17 08:53:05.731: W/dalvikvm(2381): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
10-17 08:53:05.741: E/AndroidRuntime(2381): FATAL EXCEPTION: main
10-17 08:53:05.741: E/AndroidRuntime(2381): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cannibal_photographer/com.cannibal_photographer.MainActivity}: java.lang.NullPointerException
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.os.Looper.loop(Looper.java:137)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.app.ActivityThread.main(ActivityThread.java:5041)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at java.lang.reflect.Method.invokeNative(Native Method)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at java.lang.reflect.Method.invoke(Method.java:511)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at dalvik.system.NativeStart.main(Native Method)
10-17 08:53:05.741: E/AndroidRuntime(2381): Caused by: java.lang.NullPointerException
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.view.ViewGroup.addViewInner(ViewGroup.java:3338)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.view.ViewGroup.addView(ViewGroup.java:3210)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.view.ViewGroup.addView(ViewGroup.java:3186)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at com.cannibal_photographer.MainActivity.onCreate(MainActivity.java:20)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.app.Activity.performCreate(Activity.java:5104)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
10-17 08:53:05.741: E/AndroidRuntime(2381):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
10-17 08:53:05.741: E/AndroidRuntime(2381):     ... 11 more
10-17 08:50:03.761:E/AndroidRuntime(2283):致命异常:主
10-17 08:50:03.761:E/AndroidRuntime(2283):java.lang.RuntimeException:无法启动活动组件信息{com.cannibal_摄影师/com.cannibal_摄影师.main活动}:java.lang.NullPointerException
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.app.ActivityThread.access$600(ActivityThread.java:141)
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.os.Handler.dispatchMessage(Handler.java:99)上
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.os.Looper.loop(Looper.java:137)
10-17 08:50:03.761:E/AndroidRuntime(2283):位于android.app.ActivityThread.main(ActivityThread.java:5041)
10-17 08:50:03.761:E/AndroidRuntime(2283):位于java.lang.reflect.Method.Invokenactive(本机方法)
10-17 08:50:03.761:E/AndroidRuntime(2283):位于java.lang.reflect.Method.invoke(Method.java:511)
10-17 08:50:03.761:E/AndroidRuntime(2283):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
10-17 08:50:03.761:E/AndroidRuntime(2283):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
10-17 08:50:03.761:E/AndroidRuntime(2283):在dalvik.system.NativeStart.main(本机方法)
10-17 08:50:03.761:E/AndroidRuntime(2283):由以下原因引起:java.lang.NullPointerException
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.view.ViewGroup.addViewInner(ViewGroup.java:3338)上
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.view.ViewGroup.addView(ViewGroup.java:3210)上
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.view.ViewGroup.addView(ViewGroup.java:3186)上
10-17 08:50:03.761:E/AndroidRuntime(2283):在com.cannibal_摄影师.MainActivity.onCreate(MainActivity.java:20)
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.app.Activity.performCreate(Activity.java:5104)上
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)上
10-17 08:50:03.761:E/AndroidRuntime(2283):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
10-17 08:50:03.761:E/AndroidRuntime(2283):。。。还有11个
10-17 08:53:04.651:E/Trace(2381):打开跟踪文件时出错:没有这样的文件或目录(2)
10-17 08:53:05.611:D/dalvikvm(2381):释放37K的所有元素的GC_,6%的自由元素2556K/2712K,暂停96ms,总计98ms
10-17 08:53:05.631:I/dalvikvm堆(2381):为2764816字节分配将堆(frag大小写)增加到5.245MB
10-17 08:53:05.681:D/dalvikvm(2381):释放2K的所有元素的GC_,3%的自由元素5254K/5416K,暂停45毫秒,总计45毫秒
10-17 08:53:05.731:D/dalvikvm(2381):GC_
将在
boatobject
上为您提供
null
,因为您正在布局
activity\u main
=>
setContentView(R.layout.activity\u main)中查找
R.id.boatimageView

由于您有两个不同的布局文件,因此需要使用
LayoutInflater
来为第二个布局
boatlayout.xml
充气。通过使用
LayoutInflater
可以从该
视图中获取
对象,您可以通过以下方式获取
对象:

Boat boatobject = (Boat) viewFromSecondXml.findViewById(R.id.boatimageView);

当您在
main活动中膨胀
acitivity\u main
布局时,您应该在
onCreate()
中初始化
Person
视图而不是
Boat
视图。由于
activity\u main
layout中未定义
Boat
视图,因此它将始终为您提供空指针异常

因此,除了使用
Boat
外,还可以尝试访问
Person
视图,如下所示:

    setContentView(R.layout.activity_main); 
    FrameLayout boatlayout = new FrameLayout(this);
    Person personobject = (Person)findViewById(R.id.personView1);

为什么您试图通过在另一个布局中定义的
Boat
布局来访问活动中的该布局?您正在调用
findViewById(R.id.boatimageView)
boatimageView
是否存在于您的
活动\u main.xml
中???这是什么?android:id=“@layout/activity\u main”
?为什么不在执行一些运行时堆叠之前尝试一个简单的Hello World应用程序呢?您是否在项目中添加了
Boat
类?boatimageView包含在boatlayout.xml中,而不是activity_main.xml中。我也在想办法进入船的布局。activit_main包含背景图像信息和personView,尽管我还没有使用person部分。您无法从main activity访问船布局,因为您已经在其中设置了activity_main布局。看看我的答案。我想这就是问题所在,我现在正在阅读关于LayoutFlater的文章。一旦我在这方面取得了一些进展,我将确认这是否解决了问题。这就是我所需要的,在你的建议之后,我进一步研究了一下,我发现了解决我问题的文档:
    setContentView(R.layout.activity_main); 
    FrameLayout boatlayout = new FrameLayout(this);
    Person personobject = (Person)findViewById(R.id.personView1);