HttpURLConnection не сохраняет файл - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь загрузить изображения из flickr api, как:

   //in main:
    new GetFlickr().execute(Lat, Long);


   //  Subclass to download photos from flickr
      public class GetFlickr  extends AsyncTask<Double, Double, String> {
        private String lat = "23.87";
        private String lang = "81.55";
        private String flickr_api = "https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=";
        private String flickr_key = "Flickr_API_KEY";
        private String flickr_opt = "&format=rest&accuracy=11&content_type=1&privacy_filter=1&geo_context=2";
        private String urls = flickr_api + flickr_key + "&lat=" + lat + "&long=" + lang + flickr_opt;
        private ProgressBar pBar;

        @Override
        protected void onPreExecute(){
          super.onPreExecute();
          pBar = new ProgressBar(getApplication());
          Toast.makeText(getApplicationContext(), urls, Toast.LENGTH_LONG).show();
          System.out.println(urls);

        }

        @Override
        protected String doInBackground(Double... doubles) {
          try{
            URL url = new URL(urls);
            HttpURLConnection connection = (HttpURLConnection)  url.openConnection();
            connection.connect();
            File file = new File(getApplicationContext().getFilesDir(),"flickr.xml");
            FileOutputStream fOut = new FileOutputStream(file);
            InputStream fInp = connection.getInputStream();
            int totalSize = connection.getContentLength();

            int downloadedSize = 0;

            byte[] buffer = new byte[1024];
            int bufferLength = 0; //used to store a temporary size of the buffer

            //now, read through the input buffer and write the contents to the file
            while ((bufferLength = fInp.read(buffer)) > 0) {
              fOut.write(buffer, 0, bufferLength);
              //Toast.makeText(getApplicationContext(), Double.toString(bufferLength), Toast.LENGTH_LONG).show();
              downloadedSize += bufferLength;
            }
            fOut.close();
          } catch (MalformedURLException e){
            e.printStackTrace();
          } catch (IOException e){
            e.printStackTrace();
          }
          return null;
        }

        protected void onProgressUpdate(Integer... values) {
          pBar.setProgress(values[0]);
        }

        @Override
        protected void onPostExecute(String s) {
          super.onPostExecute(s);
          pBar.setVisibility(View.GONE);
        }
      }

Хотя созданный urls правильный (я могу скопировать, вставить его в браузер и получить файлы xml обратно ) файл не сохраняется нигде, так что я могу его проанализировать.

Кроме того, мне нужно передать два двойных, Lat и Lang, поэтому, вероятно, мой аргумент функции также неверен. Будучи очень новым для java, я не знаю, как определить params.

Пожалуйста, скажите мне, что я здесь не так делаю.

Обновление Я ожидаю получить файл типа

<rsp stat="ok">
<photos page="1" pages="1413" perpage="250" total="353095">
<photo id="49344451012" owner="111497945@N04" secret="7d073516fb" server="65535" farm="66" title="Etretat" ispublic="1" isfriend="0" isfamily="0"/>
<photo id="49343777058" owner="186211180@N06" secret="b937a40e99" server="65535" farm="66" title="vinhomes-smart-city-vuon-nhat-1" ispublic="1" isfriend="0" isfamily="0"/>
<photo id="49344446262" owner="57849799@N04" secret="a9e0d0a1ac" server="65535" farm="66" title="Solitario" ispublic="1" isfriend="0" isfamily="0"/>
<photo id="49344229736" owner="58472155@N05" secret="d4ff74d968" server="65535" farm="66" title="IMG_0565" ispublic="1" isfriend="0" isfamily="0"/>
<photo id="49343774068" owner="58472155@N05" secret="fac23b927c" server="65535" farm="66" title="IMG_0572" ispublic="1" isfriend="0" isfamily="0"/>
<photo id="49343773223" owner="50072010@N04" secret="25f12643e6" server="65535" farm="66" title="Aarti Ritual of the Sacred Ganges - Haridwar, India" ispublic="1" isfriend="0" isfamily="0"/>

, из которого я имею извлечь farm, secret et c

...