私は、ユーザーがアーカイブされたニュースビデオを表示できる既存のJ2MEモバイルアプリを、Series40フルタッチデバイス用の最新のNokiaSDK2.0プラットフォームに移植してきました。
私は、アプリケーションのUI機能とネットワーク機能にそれぞれLWUITテクノロジーとLWUIT4IOテクノロジーの両方を使用しています。
このアプリは、S40 5thEditionSDKプラットフォームエミュレーターで動作することがテストされています。LWUIT4IOの ConnectionRequest クラスを拡張し、LWUITの XMLParserを利用することで、アプリはHTTPリクエストを正常に送信し、基本的にXML形式のフィード(動画に必要なメタデータを含む)を返すWebサービスから期待される応答データを取得できます(のURLは次のとおりです。 Webサービス: http ://nokiamusic.myxph.com/nokianewsfeed.aspx?format = 3gp )
ただし、何らかの理由で、最新のNokiaSDK2.0プラットフォームでアプリを実行しようとした場合はそうではありません。WebサービスのInputStream 応答 を解析(XMLParser.parse())しようとすると 、 java.lang.NullPointerExceptionがスロー されます。対応する送信された要求と受信された応答のエミュレーターのネットワークトラフィックモニターをトレースすると、応答ステータス200が成功したにもかかわらず、コンテンツとして0バイトが返されました。どうやらXMLParserオブジェクトはそもそも解析するものがありません。
どういうわけか、この問題に光を当てたり、関連する解決策を共有したり、問題をさらに改善するのに役立てていただければ幸いです。
以下に投稿されているのは、 Webサービスに接続してXML応答を処理するSegmentServiceクラス(LWUITのConnectionRequestのサブクラス)のコードです。
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;
}
}