使用JSOUP填充自定义ListView项

时间:2014-06-23 17:10:51

标签: android listview jsoup

这是我的片段的一部分,它提取HTML表格的某些部分:

public class Vertretung extends Fragment {
        ArrayList<Vertretungsdaten> mData = new ArrayList<Vertretungsdaten>();
        ListView mListView;
        private CustomAdapter mAdapter;
                 //unrelevant stuff
            String URL = "https://greselius.net/idesk/vplan/Anzeige/Schueler_heute/subst_001.htm";
            try {
                Document doc = Jsoup.connect(URL).userAgent("Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de-de) AppleWebKit/523.10.3 (KHTML, like Gecko) Version/3.0.4 Safari/523.10").get(
                );
                Elements questions = doc.select("table.mon_list");
                Elements td = questions.select("td[align]");
                for (Element myElement: td) {
                    Vertretungsdaten daten = new Vertretungsdaten();
                    daten.setKlasse(myElement.text());
                    daten.setStunde(myElement.text());
                    daten.setVertreter(myElement.text());
                    daten.setFach(myElement.text());
                    daten.setRaum(myElement.text());
                    daten.setLehrer(myElement.text());
                    daten.setArt(myElement.text());
                    daten.setText(myElement.text());
                    mData.add(daten);
                }                            

这是我的Vertretungsdaten课程:

public class Vertretungsdaten {
    private String klasse;
    private String stunde;
    private String vertreter;
    private String fach;
    private String raum;
    private String lehrer;
    private String art;
    private String text;
    private int typ;

    public Vertretungsdaten() {

    }


    public String getVertreter() {
        return vertreter;
    }

    public void setVertreter(String vertreter) {
        this.vertreter = vertreter;
    }

每个字符串都有getter和setter。 现在这是我的CustomAdapter:

public class CustomAdapter extends ArrayAdapter<Vertretungsdaten> {

    private ArrayList<Vertretungsdaten> objects;


    public CustomAdapter(Context context, int textViewResourceId, ArrayList<Vertretungsdaten> objects) {
        super(context, textViewResourceId, objects);
        this.objects = objects;
    }


    public View getView(int position, View convertView, ViewGroup parent) {


        View v = convertView;


        if (v == null) {
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.item, null);
        }


        Vertretungsdaten i = objects.get(position);

        if (i != null) {

            TextView lehrer = (TextView) v.findViewById(R.id.lehrer);
            //same thing for the other textviews

            lehrer.setText(i.getLehrer());
            //again same thing for the other textviews

        return v;

    }

}

现在我有一个自定义列表视图,应该填充如下:

Klasse      Lehrer       Fach       Art
Stunde      Vertreter    Raum       Text

Klasse      Lehrer       Fach       Art
Stunde      Vertreter    Raum       Text

Klasse      Lehrer       Fach       Art
Stunde      Vertreter    Raum       Text

但是会发生什么:

Klasse      Klasse       Klasse     Klasse
Klasse      Klasse       Klasse     Klasse

Stunde      Stunde       Stunde     Stunde
Stunde      Stunde       Stunde     Stunde

我做错了什么? 提前致谢

1 个答案:

答案 0 :(得分:0)

我认为问题出在您正在构建的数组中:

for (Element final : td) {
                        Vertretungsdaten daten = new Vertretungsdaten();
                        daten.setKlasse(question.text());
                        daten.setStunde(question.text());
                        daten.setVertreter(question.text());
                        daten.setFach(question.text());
                        daten.setRaum(question.text());
                        daten.setLehrer(question.text());
                        daten.setArt(question.text());
                        daten.setText(question.text());
                        mData.add(daten);
                    }

您在循环中使用相同的对象“问题”。你能说明它的初始化地点吗?和“td”呢?你应该使用“final”,final.text()来填充daten。 (同样使用“final”这个词不适合用于变量。)

for (Element myElement: td) {
                        Vertretungsdaten daten = new Vertretungsdaten();
                        daten.setKlasse(myElement.text());
                        daten.setStunde(myElement.text());
                        daten.setVertreter(myElement.text());
                        daten.setFach(myElement.text());
                        daten.setRaum(myElement.text());
                        daten.setLehrer(myElement.text());
                        daten.setArt(myElement.text());
                        daten.setText(myElement.text());
                        mData.add(daten);
                    }

尝试在循环中放入一些日志以查看您在mData中添加的内容。