我无法在我的微调器中设置String []值

时间:2014-04-23 17:14:44

标签: java android string spinner

我是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)

3 个答案:

答案 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);
}