【问题标题】:android: Is it possible to dowload file to disk given an xml (from a URL)?android:是否可以在给定 xml(来自 URL)的情况下将文件下载到磁盘?
【发布时间】:2011-04-27 02:22:09
【问题描述】:

我有一个 URL,例如http://somedomain.com/sync_login/go123/go,它给出了一个 XML,如果你要在网络浏览器中查看它(我使用的是 firefox),输出是这样的:

<SyncLoginResponse>
    <Videos>
    <Video>
        <name>27/flv</name>
        <title>scooter</title>
        <url>http://somedomain.com/tabletcms/tablets/tablet_content/000002/videos/</url>
        <thumbnail>http://somedomain.com/tabletcms/tablets/tablet_content/000002/thumbnails/106/jpg</thumbnail>

    </Video>
    </Videos>
    <Slideshows>
    <Slideshow>
        <name>44</name>
        <title>ProcessFlow</title>
        <pages>4</pages>

        <url>http://somedomain.com/tabletcms/tablets/tablet_content/000002/slideshows/</url>
    </Slideshow>
    <Slideshow>
        <name>71</name>
        <title>Processflows</title>
        <pages>3</pages>
        <url>http://somedomain.com/tabletcms/tablets/tablet_content/000002/slideshows/</url>

    </Slideshow>
    </Slideshows>
    <Forms>
    <Form>
        <name>Best Form Ever/html</name>
        <url>http://somedomain.com/tabletcms/tablets/tablet_content/000002/form/</url>
    </Form>
    </Forms>

    <Websites>
    <Website>
        <name>facebook</name>
        <url>http://www.facebook.com</url>
    </Website>
    </Websites>
    <Surveys>
    <Survey>

        <name>CokeSurvey/html</name>
        <url>http://somedomain.com/tabletcms/tablets/tablet_content/000002/survey/</url>
    </Survey>
    </Surveys>
    <Interactives>
    <Interactive>
        <name>34/swf</name>

        <title>PirateGem</title>
        <url>http://somedomain.com/tabletcms/tablets/tablet_content/000002/interactives/</url>
        <thumbnail>http://somedomain.com/tabletcms/tablets/tablet_content/000002/thumbnails/110/png</thumbnail>
    </Interactive>
    <Interactive>
        <name>36/swf</name>
        <title>tictactoe</title>

        <url>http://somedomain.com/tabletcms/tablets/tablet_content/000002/interactives/</url>
        <thumbnail>http://somedomain.com/tabletcms/tablets/tablet_content/000002/thumbnails/106/jpg</thumbnail>
    </Interactive>
    </Interactives>
    <Skins>
    <Skin>
        <title>CokeZero</title>

        <fontcolor>F50A0A</fontcolor>
        <backgroundcolor>787777</backgroundcolor>
        <reset>18-reset/png</reset>
        <slideshows>18-slideshows/png</slideshows>
        <url>http://somedomain.com/tabletcms/tablets/tablet_content/000002/skins/</url>
    </Skin>

    </Skins>
    <AdminSites>
    <AdminSite>
        <name>yahoo</name>
        <url>http://www.yahoo.com</url>
    </AdminSite>
    </AdminSites>
    <AdminSlideshows>

    <AdminSlideshow>
        <name>71</name>
        <title>Processflows</title>
        <pages>3</pages>
        <url>http://somedomain.com/tabletcms/tablets/tablet_content/000002/slideshows/</url>
    </AdminSlideshow>
    </AdminSlideshows>

    <AdminVideos>
    <AdminVideo>
        <name>27/flv</name>
        <title>scooter</title>
        <url>http://somedomain.com/tabletcms/tablets/tablet_content/000002/videos/</url>
        <thumbnail>http://somedomain.com/tabletcms/tablets/tablet_content/000002/thumbnails/106/jpg</thumbnail>
    </AdminVideo>

    </AdminVideos>
    <UserDetails>
        <userid>137</userid>
        <userfirstname>Jayem</userfirstname>
        <userlastname>Dalisay</userlastname>
        <messages></messages>
        <companyname>John Stewart Company</companyname>

    </UserDetails>
</SyncLoginResponse>

我想将 XML 中给出的信息和文件下载到我的平板电脑上。

我是 android dev 的新手,非常感谢!

【问题讨论】:

    标签: android xml url file download


    【解决方案1】:
    private Uri downloadFileFromURL(URL url, Context context, String fileName) {
        try {
          URLConnection conn = url.openConnection();
          HttpURLConnection httpConnection = conn instanceof HttpURLConnection ? (HttpURLConnection ) conn  : null;
          if(httpConnection != null) {
            int contentLength = httpConnection.getContentLength();
            int len, length = 0;
            byte[] buf = new byte[8192];
            InputStream is = httpConnection.getInputStream();
            File file = new File(context.getExternalFilesDir(null), fileName);
            OutputStream os = new FileOutputStream(file);
            try {
              while((len = is.read(buf, 0, buf.length)) > 0) {
                os.write(buf, 0, len);
                length += len;
                publishProgress((int) (PROGRESS_MAX * (float) length / contentLength));
              }
              os.flush();
            }
            finally {
              is.close();
              os.close();
            }
            return Uri.fromFile(file);
          }
        }
        catch(IOException e)
        {
           //Exception handling goes here
        }
        return null;
      }
    

    我在我的 AsyncTask 类中编写了这个方法,所以我使用 publishProgress 来更新进度,您可以删除该行。但我建议你也写你的 AsyncTask。

    希望对你有帮助:)

    别忘了在你的 android-manifest.xml 中添加 android.permission.INTERNET 权限。我犯了这个愚蠢的错误几次:)

    【讨论】:

    • 感谢您的回复,但是我会在哪个目录看到下载的文件?
    • @migz 该方法返回下载文件的Uri,如果出错则返回null。
    猜你喜欢
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2021-09-04
    • 2023-02-08
    相关资源
    最近更新 更多