android: Возможно ли повторно загрузить файл на диск с учетом xml (с URL-адреса)?

#android #xml #url #file #download

#Android #xml #url #файл #Скачать

Вопрос:

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

Ответ №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.permission.Разрешение на доступ в ИНТЕРНЕТ в вашем android-manifest.xml . Я совершил эту глупую ошибку несколько раз 🙂

Комментарии:

1. Спасибо за ваш ответ, но в каком каталоге я увижу загруженный файл?

2. @migz Этот метод возвращает Uri загруженного файла, значение null, если что-то пойдет не так.