【发布时间】:2015-07-16 00:33:47
【问题描述】:
我正在尝试在片段中显示 RSS 提要。当您点击一个按钮时,提要应该被拉出并显示在 2 个 TextView 中(例如 = 'tv1' 是 'City' 而 'tv2' 是 'Arsenal')。
我使用的代码在没有碎片的情况下运行良好。
但是当我为片段定制它时,当您单击按钮时,应用程序会停止并冻结。运行应用程序时没有显示错误,但我认为从片段内部解析 XML 存在一些问题。
下面是 EPLFragment 类:
public class EPLFragment extends Fragment {
String finalUrl="http://www.michael-r-oneill.ie/Custom_Mike/rsseplfixtures.xml";
HandleXML obj;
TextView firsttag;
TextView secondtag;
ImageButton mykzimagebutton, mykzimagebutton2;
public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
{
View rootView = paramLayoutInflater.inflate(R.layout.epl_layout, paramViewGroup, false);
this.firsttag = ((TextView)rootView.findViewById(R.id.tv1));
this.secondtag = ((TextView)rootView.findViewById(R.id.tv2));
this.mykzimagebutton = ((ImageButton)rootView.findViewById(R.id.imagebuttonhome));
this.mykzimagebutton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
String finalUrl="http://www.michael-r-oneill.ie/Custom_Mike/rsseplfixtures.xml";
HandleXML obj;
obj = new HandleXML(finalUrl);
obj.fetchXML();
while(obj.parsingComplete);
firsttag.setText(obj.getFirstTag());
secondtag.setText(obj.getSecondTag());
}
});
return rootView;
}
}
下面是 HandleXML 类:
public class HandleXML {
private String title = "title";
private String link = "link";
private String firsttag = "firsttag";
private String secondtag = "secondtag";
private String urlString = null;
private XmlPullParserFactory xmlFactoryObject;
public volatile boolean parsingComplete = true;
public HandleXML(String url){this.urlString = url;}
public String getTitle(){return title;}
public String getLink(){return link;}
public String getFirstTag(){return firsttag;}
public String getSecondTag(){return secondtag;}
public void parseXMLAndStoreIt(XmlPullParser myParser) {
int event;
String text=null;
try {
event = myParser.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
String name=myParser.getName();
switch (event){
case XmlPullParser.START_TAG:
break;
case XmlPullParser.TEXT:
text = myParser.getText();
break;
case XmlPullParser.END_TAG:
if(name.equals("title")){
title = text;
}
else if(name.equals("link")){
link = text;
}
else if(name.equals("firsttag")){
firsttag = text;
}
else if(name.equals("secondtag")){
secondtag = text;
}
else{
}
break;
}
event = myParser.next();
}
parsingComplete = false;
} catch (Exception e) {
e.printStackTrace();
}
}
public void fetchXML(){
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
InputStream stream = conn.getInputStream();
xmlFactoryObject = XmlPullParserFactory.newInstance();
XmlPullParser myparser = xmlFactoryObject.newPullParser();
myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
myparser.setInput(stream, null);
parseXMLAndStoreIt(myparser);
stream.close();
} catch (Exception e) {
}
}
});
thread.start();
}
}
非常感谢任何帮助!提前致谢。
【问题讨论】:
标签: java android xml android-fragments rss