2010-07-18 2 views
1

Im пытается отобразить эту ListView, но я продолжаю получать:андроид ListView nullpointer.exception

07-17 21: 14: 22,233: ERROR/AndroidRuntime (349): java.lang.NullPointerException

Я думаю, что знаю, в чем проблема, но я не знаю, как это исправить.

У меня есть массив строк, которые я буду использовать для отображения в моем списке

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

Dont беспокоиться анализатор работает. единственная проблема, которую я вижу с ним в том, что анализатор не знает, сколько строк сайт будет так я устанавливаю массив строк в парсер, чтобы быть очень большой:

String substr[] = new String[250]; 

, но я знаю, что в основном есть только как 11 до 13 значений, которые я буду хранящих в этом массиве, проблема, я думаю, когда я делаю это:

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

    ListView lv = getListView(); 

, так как массив строк устанавливается иметь до 250 значений в нем, и я только на самом деле магазин скажем, 12, тогда есть нулевые записи, поэтому, когда я запускаю код, он показывает мне мой список, но когда я добираюсь до конца, он закрывается, и журнал сообщает мне, что существует nu llpointer. Я могу рассказать, сколько записей я собрал во время разбора, но как я могу сообщить своему списку, чтобы показать только 12 элементов в списке, чтобы не было никаких нулевых записей. или есть другое решение для моей проблемы.

Спасибо,

@Cristian C.

Я пытался делать то, что вы сказали, но теперь я получаю:

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)); 

какие-либо идеи? Спасибо

+0

... К сожалению, вы правы. Еще раз взгляните на мой ответ. – Cristian

ответ

2

вместо того, чтобы возвратить массив строк в методе тему, я хотел бы вернуть список

так вместо

String substr[] = new String[250] 

вы могли бы написать

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

так что теперь вы можете просто использование

substr.add("whatever string"); 

ArrayList будет только как большим, как элементы, которые вы добавляете, так что вам не придется беспокоиться об исключениях NullPointer

и поскольку метод темы теперь возвращает ArrayList, последняя часть может быть переписана как

niceArray = topicparser.topic("test.com"); 
setListAdapter(new ArrayAdapter<String>(this, R.layout.topics, niceArray)); 
+0

Я собираюсь попробовать это следующее спасибо – jramirez

+0

Спасибо, что решил мою проблему! – jramirez

3

Вместо обычного массива используйте ArrayList.

Чтобы преобразовать обычный массив ArrayList, вы можете сделать что-то вроде:

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

Эти классы включены в java.util пакет.

+0

и могу ли я передать этот arraylist адаптеру списка так: ArrayList niceArray = Arrays.asList (ТЕМЫ); // темы были // мой строковый массив setListAdapter (новый ArrayAdapter (это, R.layout.topics, niceArray)); – jramirez

+0

Пожалуйста, смотрите редактирование на вопрос выше – jramirez

+0

Я попытался изменения вы сказали Теперь я не получаю java.lang.ClassCastException: java.util.Arrays $ ArrayList но я подоконник получить java.lang.NullPointerException – jramirez

1

Я решил эту проблему, переопределив метод getView.


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)); 
Смежные вопросы