ผมกำลังศึกษาการอ่าน Rss Feed ด้วย Android จากเว็บนี้ครับ
http://amitandroid.blogspot.com/2013/02/android-rssfeed-with-async-task-example.html หลังจากอ่านแล้วผมได้ดาวน์โหลดโค้ดจากเว็บนั้นมาลองใช้งานดู โดยลองใช้อ่าน RSS ของเว็บสนุกจากลิ้งค์นี้ครับ
http://rssfeeds.sanook.com/rss/feeds/sanook/news.index.xml พอรันแล้วก็ไม่มี error ข้อความก็แสดงได้ปกติ แต่มันไม่สามารถอ่านไฟล์ภาพจาก RSS ได้ครับ และที่ log มันขึ้นข้อความนี้ครับ
06-19 08:43:57.637: D/rssfeed(785): imageAndTexts1.get(position).getImgLink() :: null ::
ผมจึงค้นหาดูในโค้ดที่โหลดมาพบว่าในไฟล์ XmlHandler.java ที่ฟังก์ชั่น startElement ผมคิดว่าเป็นการอ่านค่าจากแท็ก media:content ครับ แต่ของเว็บ sanook จะเป็นแท็ก enclosure ครับ ตัวอย่าง
<enclosure url="
http://p3.s1sf.com/ns/0/ud/238/1192503/kob600.jpg" type="image/jpeg"/>
ผมจึงได้เปลี่ยนโค้ดใน startElement จาก
if (qName.equalsIgnoreCase("media:content"))
{
if (!atts.getValue("url").toString().equalsIgnoreCase("null")) {
feedStr.setImgLink(atts.getValue("url").toString());
} else {
feedStr.setImgLink("");
}
}
เปลี่ยนเป็น
if (qName.equalsIgnoreCase("enclosure"))
{
if (!atts.getValue("url").toString().equalsIgnoreCase("null")) {
feedStr.setImgLink(atts.getValue("url").toString());
} else {
feedStr.setImgLink("");
}
}
แต่พอรันหลังจากเปลี่ยนโค้ดแล้วมันขึ้น error แบบนี้ครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
06-19 08:08:09.165: E/AndroidRuntime(2661): FATAL EXCEPTION: main
06-19 08:08:09.165: E/AndroidRuntime(2661): android.os.NetworkOnMainThreadException
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
06-19 08:08:09.165: E/AndroidRuntime(2661): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
06-19 08:08:09.165: E/AndroidRuntime(2661): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
06-19 08:08:09.165: E/AndroidRuntime(2661): at java.net.InetAddress.getAllByName(InetAddress.java:214)
06-19 08:08:09.165: E/AndroidRuntime(2661): at libcore.net.http.HttpConnection.<init>HttpConnection.java:70)
06-19 08:08:09.165: E/AndroidRuntime(2661): at libcore.net.http.HttpConnection.<init>HttpConnection.java:50)
06-19 08:08:09.165: E/AndroidRuntime(2661): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
06-19 08:08:09.165: E/AndroidRuntime(2661): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
06-19 08:08:09.165: E/AndroidRuntime(2661): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
06-19 08:08:09.165: E/AndroidRuntime(2661): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
06-19 08:08:09.165: E/AndroidRuntime(2661): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
06-19 08:08:09.165: E/AndroidRuntime(2661): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
06-19 08:08:09.165: E/AndroidRuntime(2661): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
06-19 08:08:09.165: E/AndroidRuntime(2661): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)
06-19 08:08:09.165: E/AndroidRuntime(2661): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
06-19 08:08:09.165: E/AndroidRuntime(2661): at com.amit.adapter.RssReaderListAdapter.getView(RssReaderListAdapter.java:64)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.AbsListView.obtainView(AbsListView.java:2159)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.ListView.makeAndAddView(ListView.java:1831)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.ListView.fillDown(ListView.java:674)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.ListView.fillFromTop(ListView.java:735)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.ListView.layoutChildren(ListView.java:1652)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.AbsListView.onLayout(AbsListView.java:1994)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.View.layout(View.java:14008)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.ViewGroup.layout(ViewGroup.java:4373)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.View.layout(View.java:14008)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.ViewGroup.layout(ViewGroup.java:4373)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.View.layout(View.java:14008)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.ViewGroup.layout(ViewGroup.java:4373)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.View.layout(View.java:14008)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.ViewGroup.layout(ViewGroup.java:4373)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.View.layout(View.java:14008)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.ViewGroup.layout(ViewGroup.java:4373)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711)
06-19 08:08:09.165: E/AndroidRuntime(2661): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
ไม่ทราบว่าจะต้องแก้ไขยังไงให้โปรแกรมสามารถอ่านรูปภาพได้ทั้งแท็ก media:content และแท็ก enclosure ครับ
อ่านไฟล์ภาพจาก RSS Feed มาแสดง Android ไม่ได้ครับ
06-19 08:43:57.637: D/rssfeed(785): imageAndTexts1.get(position).getImgLink() :: null ::
ผมจึงค้นหาดูในโค้ดที่โหลดมาพบว่าในไฟล์ XmlHandler.java ที่ฟังก์ชั่น startElement ผมคิดว่าเป็นการอ่านค่าจากแท็ก media:content ครับ แต่ของเว็บ sanook จะเป็นแท็ก enclosure ครับ ตัวอย่าง
<enclosure url="http://p3.s1sf.com/ns/0/ud/238/1192503/kob600.jpg" type="image/jpeg"/>
ผมจึงได้เปลี่ยนโค้ดใน startElement จาก
if (qName.equalsIgnoreCase("media:content"))
{
if (!atts.getValue("url").toString().equalsIgnoreCase("null")) {
feedStr.setImgLink(atts.getValue("url").toString());
} else {
feedStr.setImgLink("");
}
}
เปลี่ยนเป็น
if (qName.equalsIgnoreCase("enclosure"))
{
if (!atts.getValue("url").toString().equalsIgnoreCase("null")) {
feedStr.setImgLink(atts.getValue("url").toString());
} else {
feedStr.setImgLink("");
}
}
แต่พอรันหลังจากเปลี่ยนโค้ดแล้วมันขึ้น error แบบนี้ครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
ไม่ทราบว่าจะต้องแก้ไขยังไงให้โปรแกรมสามารถอ่านรูปภาพได้ทั้งแท็ก media:content และแท็ก enclosure ครับ