2012-07-05 120 views
0

我试图为spinners做适配器,但是我在answertime.setAdapter(adapter)上得到一个NullPointerException;为什么是这样?我的数组是在strings.xml中,他们应该在哪里? 这里是完整的代码。.setAdapter(adapter);给NullPointerException异常

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 

} 

}

任何帮助是appreciated- Lijap

回答

2

你永远不会初始化answertimegametime,或missesallowed。你需要做这样的事情,

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()他们。

也,这里是另一个问题,那你构建的东西到参考adapter2

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

通知,那么你修改adapter,并设置adapter为适配器微调。那是你要的吗?

3

需要初始化

Spinner answertime; 
Spinner gametime; 
Spinner missesallowed; 

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

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

要初始化Spinner S,你应该添加这样的事情你叫setContentView后:

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

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

相关问题