java - nullpointerException 无法启动 Activity

标签 java android android-intent nullpointerexception

当我尝试从主要 Activity 启动第二个 Activity 时,我不断收到 nullpointerexception 错误,我的主要 Activity 代码如下: 包 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);
    }
}

似乎导致问题的函数是在我的第二个 Activity 中,在这里:

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)

最佳答案

传递代码后,第 34 行似乎是:

layout.addView(test);

因此这一行会生成空指针异常

检查你的布局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,因为它不会抛出该错误。所以布局必须是。

关于java - nullpointerException 无法启动 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15295273/

相关文章:

Java 匹配器模式问题

java - 如何将 int 转换为字节数组(这是一个局部变量),无论底层硬件的字节顺序如何都保证相同的结果

java - JAXB 解码错误后文件被阻止的文件

java - 在java中保存所有时区的日期时间

android - BroadcastReceiver 多久监听一次 Intents

java - 如何在android中设置壁纸时打开 "Set as"菜单

java - 为什么签名的android apk不能在模拟器上运行

c# - 在 Windows 上安装 Xamarin Studio

android - 在 Eclipse ADT 中创建一个新的 Android 项目会出现 NullPointerException — Mac OS X

android - 生成的 ListView 应用程序的 Intent 停止工作