Android - ผมทำการดึง rss feed (ข่าว) อ่ะครับ แต่พอกดรันแล้วปรากฎว่า ข่าวไม่มาแสดงที่ listview อ่ะครับ รบกวนพี่ๆช่วยแนะนำหน่อยครับ ขอบคุณครับ
คือว่าผมทำการดึง rss อ่ะครับ แล้วพอกด loadxml มันไม่แสดงที่ listview ให้อ่ะครับ
Code (Android-Java)
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class News_1 extends Activity {
private Context context;
private Button loadxml;
private ListView listview;
private Thread thread;
private Handler handler;
private MylistViewAdapter mylistViewAdapter;
private ArrayList<channel> data = new ArrayList<News_1.channel>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_1);
context = this;
loadxml = (Button) findViewById(R.id.btngetnews);
listview = (ListView) findViewById(R.id.listView_news1);
mylistViewAdapter = new MylistViewAdapter();
listview.setAdapter(mylistViewAdapter);
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
Toast.makeText(context, "Load failed", Toast.LENGTH_SHORT)
.show();
break;
case 1:
Toast.makeText(context, "Load completed",
Toast.LENGTH_SHORT).show();
data = (ArrayList<channel>) msg.obj;
mylistViewAdapter.notifyDataSetChanged();
break;
}
}
};
loadxml.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// load xml document
thread = new Thread(new MySaxParser());
thread.start();
}
});
}
//
private class MySaxParser implements Runnable {// Read xml
@Override
public void run() {
SAXParserFactory spf = SAXParserFactory.newInstance();
Message message = new Message();
message.what = 0;
try {// Read
SAXParser sp = spf.newSAXParser();
XMLReader xmlreader = sp.getXMLReader();
MyXMLHandler myXMLHandler = new MyXMLHandler();
xmlreader.setContentHandler(myXMLHandler);
xmlreader.parse(new InputSource(new URL(// Read from url
"http://www.nationchannel.com/rss/kabtokjaknation.xml")
.openStream()));
message.what = 1;
message.obj = myXMLHandler.getData();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
handler.sendMessage(message);// load complete fail
}
}
private class MylistViewAdapter extends BaseAdapter {
private ViewHolder viewholder;
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.lv_news1,
null);
viewholder = new ViewHolder();
viewholder.title = (TextView) view.findViewById(R.id.txtTitle);
viewholder.pubDate = (TextView) view
.findViewById(R.id.txtpubDate);
viewholder.description = (TextView) view
.findViewById(R.id.txtdescription);
viewholder.link = (TextView) view.findViewById(R.id.txtlink);
view.setTag(viewholder);
} else {
viewholder = (ViewHolder) view.getTag();
}
viewholder.title.setTag(data.get(position).getTitle());
viewholder.description.setTag(data.get(position).getDescription());
viewholder.link.setTag(data.get(position).getLink());
viewholder.pubDate.setTag(data.get(position).getPubDate());
return view;
}
private class ViewHolder {
public TextView title, description, link, pubDate;
}
}
public class MyXMLHandler extends DefaultHandler {
private ArrayList<channel> data = new ArrayList<News_1.channel>();
private channel temp;
private String currentValue;// เก็บค่าที่ อ่านเข้ามา
public ArrayList<channel> getData() {
return this.data;// ส่งค่าที่เก็บไปให้ data
}
public void setData(ArrayList<channel> data) {
this.data = data;
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if (localName.equalsIgnoreCase("channel")) {
temp = new channel();
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
if (localName.equalsIgnoreCase("title")) {
temp.setTitle(currentValue);
} else if (localName.equalsIgnoreCase("description")) {
temp.setDescription(currentValue);
} else if (localName.equalsIgnoreCase("link")) {
temp.setLink(currentValue);
} else if (localName.equalsIgnoreCase("pubDate")) {
temp.setPubDate(currentValue);
} else if (localName.equalsIgnoreCase("channel")) {
data.add(temp);
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
currentValue = new String(ch, start, length);
}
}
public class channel extends Object {// เก็บข้อมูล channel..
private String title;
private String description;
private String link;
private String pubDate;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getPubDate() {
return pubDate;
}
public void setPubDate(String pubDate) {
this.pubDate = pubDate;
}
}
}
Tag : Mobile, Android, Mobile
ประวัติการแก้ไข 2014-06-12 22:01:04
Date :
2014-06-12 21:50:25
By :
joecomscience
View :
1268
Reply :
3
ได้ลอง Debug ดูหรือเปล่าครับ มันทำเงื่อนไขตรงไหน หรือหลุดในส่วนของ thread = new Thread(new MySaxParser()); หรือไม่
Date :
2014-06-13 09:22:36
By :
mr.win
Error อะไรอะครับ
อ่อ แล้วตรงเมธอด getView() ของคลาส MylistViewAdapter ตรง viewHolder.xxx.setTag() จะเซตค่าให้ TextView ต้องเป็น setText() นะครับ
Date :
2014-06-13 09:34:40
By :
devahoy
ได้ลอง Debug ดูหรือเปล่าครับ มันทำเงื่อนไขตรงไหน หรือหลุดในส่วนของ thread = new Thread(new MySaxParser()); หรือไม่
==
ลองแล้วครับ แต่ตอน set ให้มันไปแสดงที่หน้า listview มันไม่ยอมมาอ่ะครับ
Date :
2014-06-15 23:53:14
By :
joecomscience
Load balance : Server 05