我是android程序员中的新手。我有问题,我无法在我的微调器中显示AirNum[]
。
String AirNum[]=new String[10];
int i;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
String Url = "...url for viewsorce...";
Document doc = null;
try
{
doc = Jsoup.connect(Url).get();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Elements flightnum = doc.select("p.flightNum");
for(i=0;i<flightnum.size();i++)
{ AirNum[i] = flightnum.get(i).text();}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,AirNum);
sp1.setAdapter(adapter);
这是我的logcat
04-24 00:09:44.638: E/AndroidRuntime(9619): java.lang.NullPointerException
04-24 00:09:44.638: E/AndroidRuntime(9619): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
04-24 00:09:44.638: E/AndroidRuntime(9619): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
04-24 00:09:44.638: E/AndroidRuntime(9619): at android.widget.Spinner.measureContentWidth(Spinner.java:681)
答案 0 :(得分:1)
您创建一个String []
new String[10];
后者,您使用flightnum.size()
元素填充它。在这里没有正好10个元素,它会崩溃(这里如果有超过10个元素,在setAdapter中如果有更少)。
改为使用列表:
List<String> AirNum = new ArrayList<String>();
并替换:
AirNum[i] = flightnum.get(i).text();
通过
AirNum.add(flightnum.get(i).text());
答案 1 :(得分:0)
你正在使用Android 4.2吗?在Android 4.2的源代码中,在ArrayAdapter.java:394中,有
text.setText(item.toString());
因此text
为空,或item
为空。
由于您向ArrayAdapter提供了Android系统资源ID,因此text
不可能为null。因此,您最好检查一下item
是否为空。
您已从flightnum.get(i).text()
初始化了列表项。更好地检查是否可以返回null。
答案 2 :(得分:0)
我认为您遇到的问题是因为Android无法正确链接到布局元素。我认为这就是测量宽度存在问题的原因。你还没有定义sp1是什么(请这样做),但下面的代码通常是你如何使用xml中定义的微调器(你可以只使用一个以编程方式创建),定义和填充你的String数组,创建ArrayAdapter和然后将它绑定到Spinner对象。
希望这有帮助。
编辑:我将String数组的第一个字母设置为小写,以符合标准命名约定。通常,您只应将类的第一个字母大写。方法和变量应该有一个小写的首字母。可能有一些例外,我不知道或很少使用。
Spinner spinner = ((Spinner) currDialog.findViewById(R.id.your_spinner_id));
if (spinner == null) {
Toast.makeText(this, "Spinner is null", Toast.LENGTH_SHORT).show();
} else {
String [] airNum = new String [10];
//
//populate string
//
//
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_dropdown_item, airNum);
spinner.setAdapter(adapter);
}