#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, если что-то пойдет не так.