LWUIT4IO (v1.5) Проблема ConnectionRquest с readResponse() - Nokia SDK 2.0

Я портировал существующее мобильное приложение J2ME, которое позволяет пользователям просматривать архивированные новостные видеоролики, на новейшую платформу Nokia SDK 2.0 для устройств с сенсорным экраном Series 40.

Я использую технологии LWUIT и LWUIT4IO для пользовательского интерфейса и сетевых функций приложения соответственно.

Приложение было протестировано для работы на эмуляторе платформы S40 5th Edition SDK. Расширяя класс ConnectionWquest в LWUIT4IO и используя XMLParser от LWUIT, приложение может успешно отправить HTTP-запрос и получить ожидаемые данные ответа от веб-службы, которая в основном возвращает тип фида в формате XML (содержащий необходимые метаданные для видео) (вот URL-адрес веб-сервис: http://nokiamusic.myxph.com/nokianewsfeed.aspx?format=3gp)

Но по какой-то причине это не тот случай, когда вы пытаетесь запустить приложение на последней платформе Nokia SDK 2.0. Он генерирует исключение java.lang.NullPointerException при попытке проанализировать (XMLParser.parse()) ответ InputStream веб-службы. Когда я отслеживаю Монитор сетевого трафика эмулятора соответствующего отправленного запроса и полученного ответа - 0 байтов были возвращены в качестве содержимого, несмотря на статус 200 успешного ответа. Очевидно, объекту XMLParser в первую очередь нечего анализировать.

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

Ниже приведен код класса SegmentService (подкласс LWUIT ConnectionRequest), который подключается к веб-сервису и обрабатывает ответ XML:

public class SegmentService extends ConnectionRequest implements ParserCallback {

    private Vector segments;
    private Video segment;

    public SegmentService(String backend) {
        String slash = backend.endsWith("/") ? "" : "/";
        setPost(false);
        setUrl(backend + slash + "nokianewsfeed.aspx");
        addArgument("format", "3gp");
    }

    public void setDateFilter(String date) {
        System.out.println(date);
        addArgument("date", date);
    }

    private Video getCurrent() {
        if (segment == null) {
            segment = new Video();
        }
        return segment;
    }

    protected void readResponse(InputStream input) throws IOException {

        InputStreamReader i = new InputStreamReader(input, "UTF-8"); 
        XMLParser xmlparser = new XMLParser();

        System.out.println("Parsing the xml...");
        Element element = xmlparser.parse(i);
        System.out.println("Root " + element.getTagName());

        int max = element.getNumChildren();
        System.out.println("Number of children: " + max);

        segments = new Vector();

        for (int c = 0; c < max; c++) {
            Element e = element.getChildAt(c);
            System.out.println("segment " + c);

            int len = e.getNumChildren();
            System.out.println("Number of children: " + len);

            for (int d=0; d<len; d++) {
                Element s = e.getChildAt(d);
                String property = s.getTagName();
                System.out.println("key: " + property);
                String value = (s.getNumChildren()>0) ? s.getChildAt(0).getText() : null;
                System.out.println("value: " + value);

                if (property.equals("title")) {
                    getCurrent().setTitle(value);
                } else if (property.equals("description")) {
                    getCurrent().setDescription(value);
                } else if (property.equals("videourl")) {
                    getCurrent().setVideoUrl(value);
                } else if (property.equals("thumburl")) {
                    getCurrent().setThumbUrl(value);
                } else if (property.equals("adurl")) {
                    getCurrent().setAdUrl(value);
                } else if (property.equals("publishdate")) {
                    getCurrent().setPublishDate(value);
                } else if (property.equals("category")) {
                    getCurrent().setCategory(value);
                } else if (property.equals("weburl")) {
                    getCurrent().setWebUrl(value);
                } else if (property.equals("thumburl2")) {
                    getCurrent().setThumb210(value);
                } else if (property.equals("thumburl4")) {
                    getCurrent().setThumb40(value);
                }
            }

            if (segment != null) {
                segments.addElement(segment);
                segment = null;
            }
        }
        fireResponseListener(new NetworkEvent(this, segments));
    }

    public boolean parsingError(int errorId, String tag, String attribute, String value, String description) {
        System.out.println(errorId);
        System.out.println(tag);
        System.out.println(value);
        System.out.println(description);
        return true;
    }
}

0 ответов

Другие вопросы по тегам