为什么这回归“不幸的是你的应用程序崩溃了”?

时间:2014-01-09 13:53:26

标签: java android

我是新手,我正在学习新波士顿的编码。

MainActivity.java:

package com.tipsoftech.fastfart;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;

public class MainActivity extends Activity {

    MediaPlayer fartsound = MediaPlayer.create(MainActivity.this,
            R.raw.fartsound);
    Button fartnow = (Button) findViewById(R.id.bFartNow);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Full screen Open
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // Full screen Close



        fartnow.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                fartsound.start();
            }
        });
    }

}

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    tools:context=".MainActivity" >

    <ImageButton
        android:id="@+id/bFartNow"
        android:contentDescription="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/fartnow" />

</RelativeLayout>

我非常肯定我没有弄乱@ drawable / stuffs。但每当我尝试在模拟器上运行应用程序时,它会说“不幸的是,快屁已经崩溃了”。我不确定发生了什么,如果有人帮助我,我会非常喜欢它。我是新开发者,我只有14岁。请帮帮我。

2 个答案:

答案 0 :(得分:4)

您需要在夸大布局后检索UI元素,否则findViewById会返回null,因此行NullPointerException处的fartnow.setOnClickListener会导致您的应用崩溃。< / p>

以下是如何修复它:

Button fartnow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main); //layout inflated
        fartnow = (Button) findViewById(R.id.bFartNow); //now it's ok 

正如评论中所指出的,requestWindowFeature 必须才能在setContentView()之前调用

请注意,如果出现此类错误,应始终阅读/发布堆栈跟踪,它应该告诉您它出现的位置,并且您可以更轻松地调试应用。

答案 1 :(得分:0)

在onCreate()方法中的setContentView()方法之后写下这一行 -

fartnow = (Button) findViewById(R.id.bFartNow);