2010-07-18 9 views
1

Im essayant d'afficher ce listview, mais je continue à obtenir un:android listview nullpointer.exception

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

Je pense que je sais quel est le problème mais je ne sais pas comment le réparer.

J'ai un tableau de chaînes que je vais utiliser à afficher dans ma liste

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

Ne vous inquiétez pas l'analyseur fonctionne très bien. le seul problème que je vois est que l'analyseur ne marche pas savoir combien de chaînes le site aura donc je suis en train de le tableau de chaînes dans l'analyseur très grand:

String substr[] = new String[250]; 

mais je sais que la plupart du temps il y a seulement comme 11 à 13 valeurs que je vais stocker dans ce tableau, le problème que je pense est quand je fais ceci:

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

    ListView lv = getListView(); 

depuis le tableau de chaînes est appelée à avoir jusqu'à 250 valeurs et je ne fait magasin disons 12 alors il y a des entrées nulles donc quand je cours le code il me montre ma vue de liste, mais quand j'arrive au fond de la vue il force ferme et le journal me dit qu'il y avait nu llpointer. Je peux dire combien d'entrées j'ai rassemblées pendant que j'analyse, mais comment puis-je dire à ma listview de montrer seulement 12 éléments dans la liste afin qu'il n'y ait pas d'entrées nulles. ou existe-t-il une autre solution pour mon problème.

Merci,

@Cristian C.

J'ai essayé de faire ce que vous avez dit, mais maintenant je reçois un:

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

ce que je l'ai fait:

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

des idées? Merci

+0

Désolé ... vous avez raison. Jetez un coup d'œil à ma réponse. – Cristian

Répondre

2

au lieu de retourner un tableau de chaînes dans votre méthode de sujet, je renvoie une liste

donc au lieu de

String substr[] = new String[250] 

vous pouvez écrire

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

maintenant vous pouvez juste utiliser

substr.add("whatever string"); 

le arraylist ne sera aussi grand que les éléments que vous ajoutez, vous n'aurez pas à vous soucier des exceptions NullPointer

et puisque la méthode de sujet renvoie désormais une ArrayList, la dernière partie peut être réécrite comme

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

Je vais essayer prochaine merci – jramirez

+0

Merci beaucoup qui a résolu mon problème! – jramirez

3

Au lieu d'utiliser un tableau normal, utilisez un ArrayList.

Pour convertir le tableau normal ArrayList, vous pouvez faire quelque chose comme:

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

Ces classes sont inclus dans le package java.util.

+0

et puis-je passer cette liste à l'adaptateur listview comme suit: ArrayList niceArray = Arrays.asList (TOPICS); // sujets était // mon tableau de chaînes setListAdapter (new ArrayAdapter (this, R.layout.topics, niceArray)); – jramirez

+0

S'il vous plaît voir modifier la question ci-dessus – jramirez

+0

J'ai essayé les changements que vous avez dit maintenant je n'obtenir un java.lang.ClassCastException: java.util.Arrays $ ArrayList mais je SILL obtenir java.lang.NullPointerException – jramirez

1

J'ai résolu ce problème en remplaçant la méthode 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));