nullpointerexception无法启动活动

时间:2013-03-08 13:39:52

标签: java android android-intent nullpointerexception

当我尝试从主活动开始第二个活动时,我一直收到nullpointerexception错误,我的主要活动代码是这样的:     包com.cep.daredevil;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity {
public boolean filled = true;
EditText taskArray[] = new EditText[200];
EditText descArray[] = new EditText[200];
String taskArr[] = new String[200];
String descArr[] = new String[200];
int taskId[] = new int[200];
int descId[] = new int[200];
int n=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    LinearLayout llayout = (LinearLayout)findViewById(R.id.llayout);

    Button addfield = new Button(this);
    addfield.setText("+");

    llayout.addView(addfield);

    addfield.setOnClickListener(new Button.OnClickListener()
    {
        public void onClick(View v)
        {
            addtask();
        }
    });

    for(int i=0;i<3;i++)
    {
        addtask();
    }
    LinearLayout blayout = (LinearLayout)findViewById(R.id.blayout);

    Button submit = new Button(this);
    submit.setText("Enter Dare");
    Button viewdare = new Button(this);
    viewdare.setText("View Dares");

    blayout.addView(submit);
    blayout.addView(viewdare);

    submit.setOnClickListener(new Button.OnClickListener()
    {
        public void onClick(View v)
        {
            inputdare(null);
        }
    });

    viewdare.setOnClickListener(new Button.OnClickListener()
    {
        public void onClick(View v)
        {
            listdare();
        }
    });
}

@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;
}

public void addtask()
{

    LinearLayout llayout = (LinearLayout)findViewById(R.id.llayout);
    taskArray[n] = new EditText(this);
    taskArray[n].setHint("Task Title");
    taskArray[n].setId(n+10000000);
    taskArray[n].setPadding(26,30,25,8);
    descArray[n] = new EditText(this);
    descArray[n].setHint("Task Description");
    descArray[n].setId(n+20000000);

    llayout.addView(taskArray[n]);
    llayout.addView(descArray[n]);
    n++;
}

public void inputdare(View v){
    EditText daretitle = (EditText)findViewById(R.id.title);

    String dare = daretitle.getText().toString();
    for (int i=0;i<n;i++)
    {
        if (taskArr[i] != null)
        {
            taskArr[i] = taskArray[i].getText().toString();
        }
        Integer id = taskArray[i].getId();
        if (id != null)
        {
            taskId[i] = id;
        }
    }

    Intent intent = new Intent(this, DisplayDares.class);
    Bundle bundle = new Bundle();
    bundle.putStringArray("TASKS", taskArr);
    bundle.putIntArray("TASKID", taskId);
    bundle.putBoolean("INPUT", true);
    intent.putExtras(bundle);
    startActivity(intent);
    }
}

public void listdare()
{
    Intent intent = new Intent(this, DisplayDares.class);
    Bundle bundle = new Bundle();
    bundle.putBoolean("INPUT", false);
    intent.putExtras(bundle);
        startActivity(intent);
    }
}

似乎导致问题的功能是我的第二个活动,在这里:

package com.cep.daredevil;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.TextView;

public class DisplayDares extends Activity {

public final static String PREFS = "Preferences";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.display_dare);      
    setupActionBar();

    Bundle bundle = getIntent().getExtras();
    Boolean input = bundle.getBoolean("INPUT");

    if (input == false){}
    else
    {
        int[] taskId = bundle.getIntArray("TASKID");
        final String[] taskArray = bundle.getStringArray("TASKS");

        LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
        TextView test = (TextView)findViewById(taskId[0]);
        test.setText(taskArray[1]);

        layout.addView(test);
            }
        }
    }

我得到的错误是:

03-08 13:32:18.053: E/AndroidRuntime(6873): FATAL EXCEPTION: main
03-08 13:32:18.053: E/AndroidRuntime(6873): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cep.daredevil/com.cep.daredevil.DisplayDares}: java.lang.NullPointerException
03-08 13:32:18.053: E/AndroidRuntime(6873):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at android.os.Looper.loop(Looper.java:137)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at android.app.ActivityThread.main(ActivityThread.java:5041)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at java.lang.reflect.Method.invokeNative(Native Method)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at java.lang.reflect.Method.invoke(Method.java:511)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at dalvik.system.NativeStart.main(Native Method)
03-08 13:32:18.053: E/AndroidRuntime(6873): Caused by: java.lang.NullPointerException
03-08 13:32:18.053: E/AndroidRuntime(6873):     at com.cep.daredevil.DisplayDares.onCreate(DisplayDares.java:32)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at android.app.Activity.performCreate(Activity.java:5104)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
03-08 13:32:18.053: E/AndroidRuntime(6873):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)

1 个答案:

答案 0 :(得分:4)

在设置代码后,第34行似乎是:

layout.addView(test);

因此该行生成一个nullpointer异常

检查布局的ID是否相同。

提示

此外,在您的错误堆栈跟踪中,您可以看到导致错误的原因:

03-08 13:32:18.053: E/AndroidRuntime(6873): Caused by: java.lang.NullPointerException
03-08 13:32:18.053: E/AndroidRuntime(6873):     at com.cep.daredevil.DisplayDares.onCreate(DisplayDares.java:34)

<强> DisplayDares.java:34

表示DisplayDares.java文件中的第34行。

您将看到它是以下行:

layout.addView(test);

现在test不能为NULL,因为它不会抛出该错误。所以布局必须是。