android: Можно ли загрузить файл на диск, предоставив XML (из URL)? - PullRequest
0 голосов
/ 27 апреля 2011

У меня есть 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, большое спасибо заранее!

1 Ответ

1 голос
/ 27 апреля 2011
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.permission.INTERNET в ваш android-manifest.xml. Я сделал эту глупую ошибку, сервал раз:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...