代码之家  ›  专栏  ›  技术社区  ›  jramirez

android listview nullpointer.exception异常

  •  1
  • jramirez  · 技术社区  · 16 年前

    我正试图显示此listview,但我不断得到一个:

    07-17 21:14:22.233:错误/AndroidRuntime(349):java.lang.NullPointerException

    我想我知道问题是什么,但我不知道如何解决它。

    parser topicparser = new parser();
      final String[] TOPICS = topicparser.topic("http://www.test.com");
    

    别担心解析器工作得很好。我看到的唯一问题是解析器不知道网站将有多少个字符串,因此我将解析器中的字符串数组设置为非常大:

    String substr[] = new String[250];
    

    但我知道,通常只有11到13个值存储在这个数组中,我想问题是当我这样做时:

    setListAdapter(new ArrayAdapter<String>(this, R.layout.topics, TOPICS));
    
      ListView lv = getListView();
    

    由于字符串数组被设置为最多有250个值,并且我实际上只存储了12个值,所以当我运行代码时,它会显示我的列表视图,但是当我到达视图的底部时,它会强制关闭,日志会告诉我有nullpointer。我可以告诉我在解析时收集了多少个条目,但是如何告诉我的listview在列表中只显示12个条目,这样就不会有任何空条目。或者我的问题还有别的解决办法吗。

    谢谢您,

    我试着照你说的做,但现在我得到了一个:

    java.lang.ClassCastException:java.util.Arrays$ArrayList

    String[] TOPICS = topicparser.topic("test.com"); 
    ArrayList<String> niceArray = (ArrayList<String>) Arrays.asList(TOPICS); // eclipse told me I had to add the cast 
    setListAdapter(new ArrayAdapter<String>(this, R.layout.topics, niceArray)); 
    

    3 回复  |  直到 16 年前
        1
  •  2
  •   mportiz08    16 年前

    我将返回一个列表,而不是在topic方法中返回字符串数组

    所以

    String substr[] = new String[250]
    

    ArrayList<String> substr = new ArrayList<String>();
    

    所以现在你可以用

    substr.add("whatever string");
    

    arraylist的大小仅与您添加的项相同,因此您不必担心nullpointer异常

    niceArray = topicparser.topic("test.com");
    setListAdapter(new ArrayAdapter<String>(this, R.layout.topics, niceArray));
    
        2
  •  3
  •   Cristian    16 年前

    与其使用普通数组,不如使用 ArrayList .

    ,您可以执行以下操作:

    ArrayList<String> niceArray = new ArrayList(Arrays.asList(normalArray));
    

    java.util

        3
  •  1
  •   stealthyninja michkra    14 年前


    class MyArrayAdapter extends ArrayAdapter<String> {
    
        private int resource;
    
        public  MyArrayAdapter(Context context, int resource, List<String> objects) {
            super(context, resource, objects);
            this.resource = resource;
        }
    
        /**
         * get new element
         *  
         * @param position - add position
         * @param convertView - previous element
         * @param parent - ListView instance 
         * @see android.widget.ArrayAdapter#getView(int, android.view.View, 
         * android.view.ViewGroup) 
         */
        @Override 
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView v = (TextView) TextView.inflate(getContext(), this.resource, null);
            v.setText(this.getItem(position));
            return v;
        }  
    }
    :
    setListAdapter(new MyArrayAdaptor(this, R.layout.topics, niceArray));