Упрощенная проблема синтаксического анализа Android SAX XML - PullRequest
0 голосов
/ 03 декабря 2010

Я видел методы упрощенного парсинга Android SAX XML.

http://www.ibm.com/developerworks/opensource/library/x-android/

Я проанализировал данные, но не могу отобразить их на экране с помощью зацикленных TextViews.

Это мой класс AndroidSaxFeedParser ...

public class AndroidSaxFeedParser extends BaseFeedParser{

final MagazineList magazineList = new MagazineList();

    protected AndroidSaxFeedParser(String magazinefeaturedURL) {
        super(magazinefeaturedURL);
        // TODO Auto-generated constructor stub
    }

    @Override
    public List<MagazineList> parse() {
        // TODO Auto-generated method stub


        RootElement root = new RootElement("maintag");

        final List<MagazineList> magazines = new ArrayList<MagazineList>();
        Element item = root.getChild("item");

        item.setEndElementListener(new EndElementListener(){

            @Override
            public void end() {
                // TODO Auto-generated method stub
                magazines.add(magazineList);
            }

        });

        item.getChild("name").setEndTextElementListener(new EndTextElementListener(){
            @Override
            public void end(String name) {
                // TODO Auto-generated method stub
                magazineList.setName(name);
            }
        });


        item.getChild("imgurl").setEndTextElementListener(new EndTextElementListener() {

            @Override
            public void end(String imgurl) {
                // TODO Auto-generated method stub
                magazineList.setImgurl(imgurl);
            }
        });

        item.getChild("date").setEndTextElementListener(new EndTextElementListener() {

            @Override
            public void end(String date) {
                // TODO Auto-generated method stub
                magazineList.setDate(date);
            }
        });

        item.getChild("description").setEndTextElementListener(new EndTextElementListener() {

            @Override
            public void end(String description) {
                // TODO Auto-generated method stub
                magazineList.setDescription(description);
            }
        });

        item.getChild("price").setEndTextElementListener(new EndTextElementListener() {

            @Override
            public void end(String price) {
                // TODO Auto-generated method stub
                magazineList.setPrice(price);
            }
        });

        item.getChild("download").setEndTextElementListener(new EndTextElementListener() {

            @Override
            public void end(String download) {
                // TODO Auto-generated method stub
                magazineList.setDownload(download);
            }
        });


        return magazines;
    }

}

Это мой класс объектной модели ...

public class MagazineList {

private ArrayList<String> name = new ArrayList<String>();
private ArrayList<String> imgurl = new ArrayList<String>();
private ArrayList<String> date = new ArrayList<String>();
private ArrayList<String> price = new ArrayList<String>();
private ArrayList<String> description = new ArrayList<String>();
private ArrayList<String> download = new ArrayList<String>(); 

public ArrayList<String> getName() {
    return name;
}

public void setName(String name) {
    this.name.add(name);
}

public ArrayList<String> getImgurl(){
    return imgurl;
}

public void setImgurl(String imgurl){
    this.imgurl.add(imgurl);
}

public ArrayList<String> getDate() {
    return date;
}

public void setDate(String date) {
    this.date.add(date);
}

public ArrayList<String> getPrice() {
    return price;
}

public void setPrice(String price) {
    this.price.add(price);
}

public ArrayList<String> getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description.add(description);
}

public ArrayList<String> getDownload() {
    return download;
}

public void setDownload(String download) {
    this.download.add(download);
}
}

Вопрос теперь в том ... как сделать так, чтобы он отображался на главной активности?

public void onCreate(Bundle savedInstanceState) {
    MagazineList magazineList = null;
private List<MagazineList> magazines = null;



    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(1);


    TextView name[];
    TextView imgurl[];
    TextView date[];
    TextView description[];
    TextView price[];
    TextView download[];

    AndroidSaxFeedParser saxparser = new  AndroidSaxFeedParser(<my website>);
    magazines = saxparser.parse();
    for(MagazineList magazineList : magazines){
         name = new TextView[magazineList.getName().size()];
         imgurl = new TextView[magazineList.getName().size()];
         date = new TextView[magazineList.getName().size()];
         description = new TextView[magazineList.getName().size()];
         price = new TextView[magazineList.getName().size()];
         download = new TextView[magazineList.getName().size()];


    (Supposingly I should get my data from here... What's next? Perhaps I have some syntax errors when declaring TextViews, I'm not sure. Please help out.)
    }

}

1 Ответ

0 голосов
/ 03 декабря 2010

Хм, я не эксперт по Java, но я никогда не видел ничего подобного тому, что вы делаете с этими TextViews.Это запись массива.

Попробуйте вместо этого (при условии, что код синтаксического анализа работает правильно)

Подождите, я ПОЛНОСТЬЮ сбит с толку тем, что вы делаете здесь с классом MagazineList.Хорошо, во-первых, для TextViews вы захотите использовать что-то вроде этого:

name = new TextView(this);
name.setText(/*your magazinelist getter for name*/);
name.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
layout.addView(name);

Они входят в список?Что вы в конечном итоге делаете с ними?Если вы просто пытаетесь убедиться, что содержимое анализируется, просто запустите отладчик и проверьте объект списка журналов после выполнения анализа.

Что касается вашего класса MagazineList ... возможно, я неправильно понимаю,но на самом деле у вас должен быть класс Magazine, который определяет отдельный журнал и его название, дату и т. д., затем вы можете использовать ArrayList<Magazine> для создания списка журналов.Затем вы можете использовать цикл foreach для их итерации или адаптировать их к пользовательскому ListView.

Пример класса журнала:

public class Magazine {

private String name, imgurl, date, price, description, download;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getImgurl(){
    return imgurl;
}

public void setImgurl(String imgurl){
    this.imgurl = imgurl;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public String getPrice() {
    return price;
}

public void setPrice(String price) {
    this.price = price;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getDownload() {
    return download;
}

public void setDownload(String download) {
    this.download = download;
}
}

Затем вам просто нужно расширить ArrayAdapter, который будетвозьмите ArrayList или Magazine [] и отобразите его в ListView.

...