如何从 url 而不是 getAssets 获取 xml 文件 [英] How to get xml file from url instead of getAssets
本文介绍了如何从 url 而不是 getAssets 获取 xml 文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试对我的应用程序进行此更改,但我失败了,database.xml 在资产中.应用程序显示此 xml,此 xml 文件存在于资产中.如何从 URL 获取此文件?
I'm trying to make this change to my app, but I fail, database.xml is in assets..the app display this xml, this xml file exist in assets. How i can get this file from URL?
MainActivity.java:
MainActivity.java:
package com.Hixa.streattraffic;
import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity
{
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.list);
List<Street> streets = null;
try
{
ParserHandler parser = new ParserHandler();
streets = parser.parse(getAssets().open("database.xml"));
ArrayAdapter<Street> adapter = new ArrayAdapter<Street>(this, R.layout.list_item, streets);
listView.setAdapter(adapter);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
ParserHandler.java
ParserHandler.java
package com.Hixa.streattraffic;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
public class ParserHandler
{
List<Street> streets;
private Street street;
private String text;
public ParserHandler()
{
streets = new ArrayList<Street>();
}
public List<Street> getStreets()
{
return streets;
}
public List<Street> parse(InputStream is)
{
XmlPullParserFactory factory = null;
XmlPullParser parser = null;
try
{
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser = factory.newPullParser();
parser.setInput(is, null);
int eventType = parser.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT)
{
String tagname = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("street"))
{
// create a new instance of street
street = new Street();
}
break;
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if(tagname.equalsIgnoreCase("street"))
{
// add street object to list
streets.add(street);
}
else if(tagname.equalsIgnoreCase("Time"))
{
street.setTime(text);
}
/*else if (tagname.equalsIgnoreCase("id")) {
street.setId(Integer.parseInt(text));
}*/
else if(tagname.equalsIgnoreCase("Street_Name"))
{
street.setStreet_Name(text);
}
else if(tagname.equalsIgnoreCase("Intersection_No."))
{
street.setIntersection_No(text);
}
else if (tagname.equalsIgnoreCase("Traffic_State"))
{
street.setTraffic_State(text);
}
break;
default:
break;
}
eventType = parser.next();
}
}
catch (XmlPullParserException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return streets;
}
}
street.java:
street.java:
package com.Hixa.streattraffic;
public class Street {
//private int id;
private String Street_Name;
private String Intersection_No;
private String Traffic_State;
private String Time;
public Street(){}
/*public Street(int id)
{
this.id = id;
}*/
public Street(String Street_Name, String Intersection_No, String Traffic_State, String Time)
{
//this.id = id;
this.Street_Name = Street_Name;
this.Intersection_No = Intersection_No;
this.Traffic_State = Traffic_State;
this.Time = Time;
}
public String getStreet_Name()
{
return this.Street_Name;
}
public void setStreet_Name(String Street_Name)
{
this.Street_Name = Street_Name;
}
public String getIntersection_No()
{
return this.Intersection_No;
}
public void setIntersection_No(String Intersection_No)
{
this.Intersection_No = Intersection_No;
}
public String getTraffic_State()
{
return this.Traffic_State;
}
public void setTraffic_State(String Traffic_State)
{
this.Traffic_State = Traffic_State;
}
public String getTime()
{
return this.Time;
}
public void setTime(String Time)
{
this.Time = Time;
}
@Override
public String toString()
{
return "Time : " + Time + "\nStreet Name : " + Street_Name +"\nStreat Intersection No. : " + Intersection_No+ "\nStreat Traffic State : " + Traffic_State;
}
}
我的问题是(希望你能帮忙)在 MainActivity.java 中有这个函数
My Question is (hope you can help) in the MainActivity.java there is this function
streets = parser.parse(getAssets().open("database.xml"));
我想从服务器获取相同的 XML 文件,我该如何实现?
I want to get the same XML file from a server, how can I achieve this?
谢谢
推荐答案
试试这个
InputStream stream = null;
URL RssUrl = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) RssUrl.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
stream = conn.getInputStream();
然后在你的解析方法中使用这个流
then use this stream in your parse method
这篇关于如何从 url 而不是 getAssets 获取 xml 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文