0

我对 java 编码很陌生,目前我正在使用 Eclipse 开发一个适用于 Android 的应用程序。

NullPointerException每次我运行我的java代码时都会遇到问题,我猜这是一个简单的问题,但我不知道如何解决这个错误。

这是与此问题相关的代码块:

EditText taskArray[] = new EditText[200];
String taskArr[] = new String[200];

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

    LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
    Button submit = new Button(this);
    submit.setText("enter dare");
    layout.addView(submit);

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

public void addtask()
{
    n++;
    LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
    taskArray[n] = new EditText(this);
    layout.addView(taskArray[n]);
}

public void inputdare()
{
    for (int i=0; i<n;i++)
    {
        taskArr[i] = taskArray[i].getText().toString();
    }
}

所以基本上每当我调用这个函数inputdare();时,

我会NullPointerException遇到错误,我真的被卡住了,不知道该怎么办):

此外,错误消息在这里:

03-08 09:50:36.273: E/AndroidRuntime(4653): FATAL EXCEPTION: main
03-08 09:50:36.273: E/AndroidRuntime(4653): java.lang.NullPointerException
03-08 09:50:36.273: E/AndroidRuntime(4653):     at com.cep.daredevil.MainActivity.inputdare(MainActivity.java:135)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at com.cep.daredevil.MainActivity$2.onClick(MainActivity.java:64)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at android.view.View.performClick(View.java:4204)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at android.view.View$PerformClick.run(View.java:17355)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at android.os.Handler.handleCallback(Handler.java:725)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at android.os.Looper.loop(Looper.java:137)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at android.app.ActivityThread.main(ActivityThread.java:5041)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at java.lang.reflect.Method.invokeNative(Native Method)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at java.lang.reflect.Method.invoke(Method.java:511)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-08 09:50:36.273: E/AndroidRuntime(4653):     at dalvik.system.NativeStart.main(Native Method)
4

6 回答 6

3
public void inputdare()
{
    for (int i=0; i<n;i++)
    {
        taskArr[i] = taskArray[i].getText().toString();
    }
}

在上面的代码中,您声明了 taskArray,因此当您从那里检索时,它会为您提供 null。在这种情况下 null.toString() 给出异常。

taskArray[i].getText() != null之前使用
taskArr[i] = taskArray[i].getText().toString();

解决了你的问题...

于 2013-03-08T10:24:14.610 回答
2

改变你的 inputdare()

public void inputdare()
{
    for (int i=0; i<n;i++)
    {
        if (taskArray[i].getText() != null) {
            taskArr[i] = taskArray[i].getText().toString();
        }
    }
}
于 2013-03-08T10:23:40.440 回答
0

设置条件以防止 NullPointer Exception 对其进行更多调试

 public void inputdare()
  {
    for (int i=0; i<n;i++)
    {
    if(taskArr[i]!=null)
    taskArr[i] = taskArray[i].getText().toString();
    }
  }

您将获得哪些数组元素确实具有空值

于 2013-03-08T10:26:41.623 回答
0

EditText taskArray[] = new EditText[200];

taskArray 是一个数组,它的每个个体都没有被初始化,所以如果你试图在它的成员上调用一个方法而不初始化它,它们会产生一个空指针异常

因此,在标记了一个类数组之后,您将不得不初始化单个对象

taskArray[0] = new EditText(context);
taskArray[1] = new EditText(context);
.
.
.
taskArray[200] = new EditText(context);

一旦确定它们已初始化,然后调用方法 inputDare(); 这将解决空指针异常。

要准确解决问题:

现在根据您的要求初始化所有 EditText 字段并将它们添加到您的布局中,然后调用 inputDare() 方法。

或者您也可以通过调用 findViewByID() 来获取 EditText Field 对象

IF n is initialized = 0 那么 n++ 应该在 taskArray[n] = new EditText(this); 的初始化之后出现

否则你会在数组的索引 0 上得到一个 Nullpointer

公共无效添加任务(){

LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
taskArray[n] = new EditText(this);
layout.addView(taskArray[n]);
n++;

}

于 2013-03-08T10:33:00.003 回答
0

您没有在代码中的任何地方调用 addTask() 方法。因此,当您单击提交按钮并执行 inputdere() 方法时,您的 taskArray 元素为空,因为

taskArray[n] = new EditText(this);

尚未执行。所以你得到 NullPointerException

taskArr[i] = taskArray[i].getText().toString();

要解决此问题,请在将按钮添加到布局后,在 onCreate() 方法中添加以下代码。

    n = -1;
    for (int i = 0; i < taskArray.length; i++) {
        addtask();
    }
于 2013-03-08T10:51:56.493 回答
0

我认为你还没有将你的edittext添加到你的布局中,把对 addtask() 的调用放在 onCreate() 中。

于 2013-03-08T10:52:36.017 回答