0

スピナー用のアダプターを作成しようとしていますが、answertime.setAdapter(adapter); で NullPointerException が発生します。どうしてこれなの?私の配列はstrings.xmlにあるべき場所にありますか? これが完全なコードです。

package lijap.app.starcraft2counters;

import java.io.File;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class Settings extends Activity implements OnItemSelectedListener {
Spinner answertime;
Spinner gametime;
Spinner missesallowed;

String[] answerseconds = { "Unlimited", "1 second", "2 seconds",
        "3 seconds", "4 seconds", "5 seconds" };

String[] gameminutes = { "Unlimited", "1 minute", "2 minutes", "3 minutes",
        "4 minutes", "5 minutes" };

String[] numberofmisses = { "Unlimited", "5", "10", "15", "20", "25" };

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings);

    ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.AnswerSeconds, R.layout.custom_spinner_list);
    adapter.setDropDownViewResource(R.layout.custom_spinner);
    answertime.setAdapter(adapter);

    ArrayAdapter adapter2 = ArrayAdapter.createFromResource(this, R.array.GameMinutes, R.layout.custom_spinner_list);
    adapter.setDropDownViewResource(R.layout.custom_spinner);
    gametime.setAdapter(adapter);

    ArrayAdapter adapter3 = ArrayAdapter.createFromResource(this, R.array.NumberOfMisses, R.layout.custom_spinner_list);
    adapter.setDropDownViewResource(R.layout.custom_spinner);
    missesallowed.setAdapter(adapter);


    answertime = (Spinner) findViewById(R.id.s_answertime);
    answertime.setAdapter(adapter);
    answertime.setOnItemSelectedListener(this);


    missesallowed = (Spinner) findViewById(R.id.s_mistakenumber);
    missesallowed.setAdapter(adapter2);
    missesallowed.setOnItemSelectedListener(this);

    gametime = (Spinner) findViewById(R.id.s_gametime);
    gametime.setAdapter(adapter3);
    gametime.setOnItemSelectedListener(this);
}

@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    // TODO Auto-generated method stub

}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub

}

}

どんな助けでも大歓迎です-Lijap

4

3 に答える 3

3

初期化する必要があります

Spinner answertime;
Spinner gametime;
Spinner missesallowed;

それ以外の場合は、次の行で次のようになりますNullPointerException

answertime.setAdapter(adapter);
gametime.setAdapter(adapter);
missesallowed.setAdapter(adapter);

sを初期化するにはSpinner、 を呼び出した後に次のようなものを追加する必要がありますsetContentView

answertime = findViewById(R.id.answertime);
gametime = findViewById(R.id.gametime);
missesallowed = findViewById(R.id.missesallowed);
于 2012-07-05T22:30:40.820 に答える
2

、、またはを初期化することはありませanswertimeん。あなたはこのようなことをする必要があります、gametimemissesallowed

answertime = findViewById(R.id.<the id for this spinner>);
gametime = findViewById(R.id.<the id for this spinner>);
missesallowed = findViewById(R.id.<the id for this spinner>);

あなたが彼らを呼ぶ前にsetAdapter()

また、ここで別の問題が発生します。

ArrayAdapter adapter2 = ArrayAdapter.createFromResource(this, R.array.GameMinutes, R.layout.custom_spinner_list);
adapter.setDropDownViewResource(R.layout.custom_spinner);
gametime.setAdapter(adapter);

参照に何かを構築してからadapter2、 を変更し、スピナーのアダプターとしてadapter設定することに注意してください。adapterそれはあなたが望むものですか?

于 2012-07-05T22:31:45.037 に答える
0

また、ビューの可視性が View.VISIBLE に設定されていることを確認してください

于 2013-07-25T07:22:45.600 に答える