我有一个问题,我自己解决不了!
我想在我的应用程序上获取 RSS 提要,因此我将这个 Url 放入我的代码中,以便获取 xml 文件然后进行解析... Rss 提要。
我成功地从 Url 中获取了 xml 数据,这是后台方法中 do 的返回字符串,但问题是当我进行解析时,xmlParser 方法中的情况都没有实现!以下是我的所有代码和 StackTrace:
MainActivity 类:
package com.example.testfeeds;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
@SuppressWarnings("unused")
public class MainActivity extends Activity {
String name;
Button getfeeds;
ArrayList<NewsFeeds> feeds;
ListView feedsList;
ArrayAdapter<NewsFeeds> adapter;
ProgressDialog progress ;
@SuppressWarnings("null")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getfeeds = (Button) findViewById(R.id.button1);
feedsList=(ListView) findViewById(R.id.listView1);
progress = new ProgressDialog(this);
progress.setMessage("Loading .... ");
progress.setCancelable(false);
getfeeds.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new GetFeeds().execute("http://yunn.yu.edu.jo/index.php?option=com_content&view=category&id=55&layout=blog&Itemid=104&format=feed&type=rss");
}
});
feedsList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position,
long id) {
NewsFeeds item = (NewsFeeds) adapter.getItemAtPosition(position);
String url= item.getLink();
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);
}
});
}
////////////////////////////////////////////////////////////////////////////
class GetFeeds extends AsyncTask<String, Integer, String>{
@Override
protected void onPreExecute() {
progress.show();
super.onPreExecute();
}
@Override
protected String doInBackground(String... arg0) {
String xmlData = GetUrlBody(arg0[0]);
Log.d("msg","in doInBackground .. ");
return xmlData ;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.d("msg","the result not null");
////--------------------------------------////
//Log.d("msg",result);
FileOutputStream makeXml = null ; //declare a file to store the incoming xml data.
InputStream xmlFile = null; // declare an input stream to get the xml file.
try {
makeXml= openFileOutput("temp.xml", Context.MODE_PRIVATE);
makeXml.write(result.getBytes());
makeXml.flush();
makeXml.close();
xmlFile= openFileInput("temp.xml");
// StringBuilder sb = new StringBuilder();
// int a =0 ;
// while ((a=xmlFile.read())!=-1) {
// sb.append((char)a);
//
// }
//
//
//
// Log.d("msg",sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
////--------------------------------------////
XmlPullParserFactory pullParserFactory;
try {
pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser parser = pullParserFactory.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(xmlFile, null);
parseXML(parser);
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
progress.dismiss();
}
}
////////////////////////////////////////////////////////////////////////////
String GetUrlBody (String Url ){
Log.d("msg","in get url ..");
HttpClient cli = new DefaultHttpClient();
HttpGet g = new HttpGet(Url);
try{
HttpResponse res = cli.execute(g);
if(res.getStatusLine().getStatusCode() == 200){
String s =
EntityUtils.toString(res.getEntity(), HTTP.UTF_8);
return s;
}else {
return "Not Found";
}
}catch(Exception exx){}
return null;
}
////////////////////////////////////////////////////////////////////////////
private void parseXML(XmlPullParser parser) throws XmlPullParserException,IOException
{
int eventType = parser.getEventType();
NewsFeeds currentFeed = null;
// int i=0;
while (eventType != XmlPullParser.END_DOCUMENT){
String tagName = null;
switch (eventType){
//----------------------------------//
case XmlPullParser.START_DOCUMENT:
feeds = new ArrayList<NewsFeeds>();
adapter = new ArrayAdapter<NewsFeeds>(this,R.layout.list_view,R.id.listView1, feeds);
break;
//----------------------------------//
case XmlPullParser.START_TAG:
tagName = parser.getName();
if (tagName == "item"){
currentFeed = new NewsFeeds();
} else if (currentFeed != null){
if (tagName == "title"){
currentFeed.title = parser.nextText();
Log.d("value",currentFeed.title);
} else if (tagName == "link"){
currentFeed.link = parser.nextText();
Log.d("value",currentFeed.link);
} else if (tagName == "pubDate"){
currentFeed.feedDate= parser.nextText();
Log.d("value",currentFeed.feedDate);
}
}
break;
//----------------------------------//
case XmlPullParser.END_TAG:
tagName = parser.getName();
if (tagName.equalsIgnoreCase("item") && currentFeed != null){
feeds.add(currentFeed);
}
//----------------------------------//
default : Log.d("error","non of the cases implemented!");
break;
}// end-switch.
///Log.d("success",feeds.get(0).getTitle());
eventType= parser.next();
//i++;
}// end-while.
} //end xmlParser method.
////////////////////////////////////////////////////////////////////////////
} // end- MainActivity class.
新闻提要类:
package com.example.testfeeds;
public class NewsFeeds {
String title;
String link;
String feedDate;
public void setTitle(String title) {
this.title = title;
}
public void setLink(String link) {
this.link = link;
}
public void setFeedDate(String feedDate) {
this.feedDate = feedDate;
}
public String getFeedDate() {
return feedDate;
}
public String getTitle() {
return title;
}
public String getLink() {
return link;
}
}
堆栈跟踪:
07-27 13:10:29.685: D/dalvikvm(9308): GC_EXTERNAL_ALLOC freed 783 objects / 56336 bytes in 424ms
07-27 13:13:40.009: D/msg(9308): in get url ..
07-27 13:14:05.304: D/dalvikvm(9308): GC_FOR_MALLOC freed 1803 objects / 94784 bytes in 351ms
07-27 13:14:05.475: D/msg(9308): in doInBackground ..
07-27 13:14:05.564: D/msg(9308): the result not null
07-27 13:14:06.164: D/dalvikvm(9308): GC_FOR_MALLOC freed 460 objects / 920152 bytes in 241ms
07-27 13:14:06.864: D/error(9308): non of the cases implemented!
07-27 13:14:06.864: D/error(9308): non of the cases implemented!
07-27 13:14:06.864: D/error(9308): non of the cases implemented!
07-27 13:14:06.887: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.894: D/error(9308): non of the cases implemented!
07-27 13:14:06.915: D/error(9308): non of the cases implemented!
07-27 13:14:06.915: D/error(9308): non of the cases implemented!
07-27 13:14:06.935: D/error(9308): non of the cases implemented!
07-27 13:14:06.935: D/error(9308): non of the cases implemented!
07-27 13:14:06.944: D/error(9308): non of the cases implemented!
07-27 13:14:06.944: D/error(9308): non of the cases implemented!
07-27 13:14:06.984: D/error(9308): non of the cases implemented!
07-27 13:14:06.984: D/error(9308): non of the cases implemented!
07-27 13:14:06.994: D/error(9308): non of the cases implemented!
07-27 13:14:06.994: D/error(9308): non of the cases implemented!
07-27 13:14:07.007: D/error(9308): non of the cases implemented!
07-27 13:14:07.030: D/error(9308): non of the cases implemented!
07-27 13:14:07.034: D/error(9308): non of the cases implemented!
07-27 13:14:07.034: D/error(9308): non of the cases implemented!
07-27 13:14:07.055: D/error(9308): non of the cases implemented!
07-27 13:14:07.055: D/error(9308): non of the cases implemented!
07-27 13:14:07.055: D/error(9308): non of the cases implemented!
07-27 13:14:07.084: D/error(9308): non of the cases implemented!
07-27 13:14:07.084: D/error(9308): non of the cases implemented!
07-27 13:14:07.084: D/error(9308): non of the cases implemented!
07-27 13:14:07.104: D/error(9308): non of the cases implemented!
07-27 13:14:07.125: D/error(9308): non of the cases implemented!
07-27 13:14:07.125: D/error(9308): non of the cases implemented!
07-27 13:14:07.125: D/error(9308): non of the cases implemented!
07-27 13:14:07.148: D/error(9308): non of the cases implemented!
07-27 13:14:07.148: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.174: D/error(9308): non of the cases implemented!
07-27 13:14:07.197: D/error(9308): non of the cases implemented!
07-27 13:14:07.197: D/error(9308): non of the cases implemented!
07-27 13:14:07.197: D/error(9308): non of the cases implemented!
07-27 13:14:07.225: D/error(9308): non of the cases implemented!
07-27 13:14:07.225: D/error(9308): non of the cases implemented!
07-27 13:14:07.225: D/error(9308): non of the cases implemented!
以此类推..直到文档结束,为什么会出现解析错误?