如何从 url 而不是 getAssets 获取 xml 文件 [英] How to get xml file from url instead of getAssets

查看:27
本文介绍了如何从 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆