Проблемы с загрузкой фотографий - PullRequest
0 голосов
/ 02 июля 2019

Я написал программу, которая Скачать фото с URL ... Но у меня есть проблема ... Некоторые фотографии загружены. И нет проблем.

Но некоторые картинки загружаются не полностью :( и в файловом менеджере я смотрю на Это сломано Вы можете помочь?

мой код:

открытый класс DownloadFileFromURL_img расширяет AsyncTask {

    private viewHolderPost holderPOST;

    public DownloadFileFromURL_img(viewHolderPost holderPOST) {
        Log.d(TAG, "DownloadFileFromURL_img: ");
        this.holderPOST = holderPOST;

    }


    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    /**
     * Downloading file in background thread
     */
    @Override
    protected String doInBackground(String... f_url) {
        int count;
        try {

            File file = new File(Environment.getExternalStorageDirectory(), "98Diha/img");

            if (!file.exists()) {
                if (!file.mkdirs()) {

                    file.createNewFile();
                }
            }



            InputStream input = null;
            int response = -1;

            URL url = new URL(f_url[0]);
            URLConnection conection = url.openConnection();

            if (!(conection instanceof HttpURLConnection))
                throw new IOException("Not an HTTP connection");

            try{
                HttpURLConnection httpConn = (HttpURLConnection) conection;
                httpConn.setAllowUserInteraction(false);
                httpConn.setInstanceFollowRedirects(true);
                httpConn.setRequestMethod("GET");
                httpConn.connect();

                response = httpConn.getResponseCode();
                if (response == HttpURLConnection.HTTP_OK) {
                    input = httpConn.getInputStream();
                }
            }
            catch (Exception ex)
            {
                throw new IOException("Error connecting");
            }






            int lenghtOfFile = conection.getContentLength();



             input = new BufferedInputStream(url.openStream());


            String imgS[] = f_url[0].split("/");
            String name = imgS[imgS.length - 1];



            String path = Environment
                    .getExternalStorageDirectory().toString()
                    + "/98diha/img/" + name;


            File filePath = new File(path);

            if (!filePath.exists()) {

                OutputStream output = new FileOutputStream(path);

                byte data[] = new byte[1024];

                long total = 0;

                while ((count = input.read(data)) != -1) {
                    total += count;


                    publishProgress("" + (int) ((total * 100) / lenghtOfFile));


                    output.write(data, 0, count);
                }


                output.flush();


                output.close();
                input.close();

            } else {
                SSToast(context, "Exist!");

                holderPOST.dowload_img.setVisibility(View.GONE);
                holderPOST.setWallpaper.setVisibility(View.VISIBLE);
                holderPOST.setWallpaper.setText(context.getString(R.string.set_wp));


                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    holderPOST.setWallpaper.setTextColor(ContextCompat.getColor(context, R.color.Teal_400));
                } else {
                    holderPOST.setWallpaper.setTextColor(context.getResources().getColor(R.color.Teal_400));
                }
            }

        } catch (Exception e) {
            Log.e("Error: ", e.getMessage());
        }

        return null;
    }

    /**
     * Updating progress bar
     */
    protected void onProgressUpdate(String... progress) {

        holderPOST.dowload_img.setVisibility(View.GONE);
        holderPOST.setWallpaper.setVisibility(View.VISIBLE);
        holderPOST.setWallpaper.setText(context.getString(R.string.dowloading));


    }

    /**
     * After completing background task Dismiss the progress dialog
     **/
    @Override
    protected void onPostExecute(String file_url) {


        holderPOST.setWallpaper.setText(context.getString(R.string.set_wp));
        holderPOST.setWallpaper.setTextColor(context.getResources().getColor(R.color.Teal_400));

        Log.d(TAG, "onPostExecute: ");
    }

}

1 Ответ

0 голосов
/ 02 июля 2019

Вместо использования AsyncTask для загрузки изображений с URL.Вы можете использовать библиотеки, такие как Glide или Picasso , чтобы сделать это быстро в одну строку.Но если вы не хотите использовать библиотеки, вы можете использовать DownloadManager , чтобы загрузить его и сохранить в файл.Вы можете проверить этот учебник или другие учебные пособия в Интернете для реализации DownloadManager.

...