【问题标题】:.setAdapter(adapter); Giving an NullPointerException.setAdapter(适配器);给出 NullPointerException
【发布时间】:2012-07-05 22:27:16
【问题描述】:

我正在尝试为微调器制作适配器,但是我在 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

【问题讨论】:

    标签: android arrays android-arrayadapter


    【解决方案1】:

    你需要初始化

    Spinner answertime;
    Spinner gametime;
    Spinner missesallowed;
    

    否则,以下行会给你一个NullPointerException

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

    要初始化Spinners,您应该在调用setContentView后添加类似这样的内容:

    answertime = findViewById(R.id.answertime);
    gametime = findViewById(R.id.gametime);
    missesallowed = findViewById(R.id.missesallowed);
    

    【讨论】:

      【解决方案2】:

      您永远不会初始化 answertimegametimemissesallowed。你需要做这样的事情,

      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 设置为微调器的适配器。这就是你想要的吗?

      【讨论】:

        【解决方案3】:

        还要确保视图可见性设置为 View.VISIBLE

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多