0

私はJavaコーディングに非常に慣れていません。現在、Eclipseを使用してAndroid用のアプリを開発しています。

Javaコードを実行するたびに常にNullPointerException問題が発生します。これは単純な問題だと思いますが、このエラーを解決する方法がわかりません。

この質問に関連するコードのブロックは次のとおりです。

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

入力を変更するdare()

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

コード内のどこにもaddTask()メソッドを呼び出さなかった。したがって、送信ボタンをクリックしてinputdere()メソッドを実行すると、taskArray要素はnullになります。

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 taskArray [] = new EditText [200];

taskArrayは配列であり、個々のメソッドは初期化されていないため、初期化せずにメンバーでメソッドを呼び出そうとすると、nullポインター例外が生成されます。

したがって、クラスの配列をデカールした後、個々のオブジェクトを初期化する必要があります

お気に入り

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

それらが初期化されていることを確認したら、メソッドinputDare();を呼び出します。これにより、nullポインタ例外が解決されます。

問題を正確に解決するには:

次に、要件に応じてすべてのEditTextフィールドを初期化し、それらをレイアウトに追加してから、inputDare()メソッドを呼び出します。

または、findViewByID()を呼び出してEditTextFieldオブジェクトを取得することもできます。

nが初期化されている=0の場合、n++はtaskArray[n] = new EditText(this);の初期化後に来る必要があります。

それ以外の場合は、配列のインデックス0でNullpointerを取得します

public void addtask(){

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

}

于 2013-03-08T10:33:00.003 に答える
0

NullPointer Exception を防止する条件を付けてさらにデバッグする

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

null値を持つ配列要素を取得します

于 2013-03-08T10:26:41.623 に答える
0

edittext をレイアウトに追加していないと思いますが、addtask() の呼び出しを onCreate(). 内に配置します。

于 2013-03-08T10:52:36.017 に答える