Как скачать файл во внутреннем хранилище, используя Volley в Android Studio? - PullRequest
2 голосов
/ 23 октября 2019

В моем приложении для Android я хочу загрузить файл с веб-сервера во внутреннее хранилище Mobile с помощью диспетчера загрузок в Android Studio. А также мне нужно использовать его внутри функции Volley.

Мой код

button.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
  DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
  Uri uri = Uri.parse("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png");
  DownloadManager.Request request = new DownloadManager.Request(uri);
 request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);                
  request.setDestinationInExternalFilesDir(DownloadsActivity.this, Environment.DIRECTORY_DOWNLOADS, "banu.jpg");
}

В приведенном выше коде я пробовал это при нажатии кнопки.

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

NetworkImageView автоматически загружает изображение из фоновой очереди и отменяет запрос.

ImageLoader используется для отдельного просмотра и автоматически использует память из дискового кэша.

мы можем использовать NetworkImageView для загрузки залпа. Ниже приведены примеры.

layout_example.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"        
    tools:context=".MainActivity">

    <com.android.volley.toolbox.NetworkImageView
            android:id="@+id/photo"
            android:adjustViewBounds="true"
            android:scaleType="fitCenter"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

</RelativeLayout>

и в вашем MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_example);
    NetworkImageView nv = (NetworkImageView) findViewById(R.id.photo);
    // image for loading...
    nv.setDefaultImageResId(R.drawable.default_image); 
    //ImgController from your code.
    nv.setImageUrl(imageUrl, ImgController.getInstance().getImageLoader()); 
}

Редактировать

  • с Volley поддерживает загрузку строк, изображений и JSON.

Volley не подходит для больших загрузок или потоковой передачи (Volley содержит все ответыв памяти во время синтаксического анализа, поэтому для больших загрузок потребуется много памяти).

Для больших загрузок следует использовать DownloadManager.

Загрузка изображений

Есть два способа сделать это с помощью Volley:

  • ImageRequest - это получает изображение по URL, возвращая растровое изображение. Вы можете установить необходимый размер. Volley выполняет обработку вне основного потока

  • ImageLoader - это загружает и кэширует изображения с удаленных URL-адресов. Это как менеджер нескольких ImageRequest. Идеально подходит для загрузки изображений в списки и сетки. Вы можете включить кэш памяти

и наш специальный просмотр изображений через NetworkImageView.

Для получения дополнительной информации вам помогут: https://mobikul.com/downloading-files-using-volley/

Надеюсь, это тебе поможет ...!

0 голосов
/ 23 октября 2019

Для загрузки с URL-адреса необходимо использовать процесс AsyncTask, а затем сохранить изображение с помощью растрового изображения.

your class...ACTIVITY...{
 oncreateFunction(){
  // your codes...
  button.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {

     Uri uri = Uri.parse("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png");
     mTask = new DownloadTask()
                    .execute(new URL(uri));
     }
    });
}

private class DownloadTask extends AsyncTask<URL,Void,Bitmap>{

    protected void onPreExecute(){

        // if need to show progress
    }

    // Background Task/non-UI thread
    protected Bitmap doInBackground(URL...urls){
        URL url = urls[0];
        HttpURLConnection conn= null;

        try{

            conn = (HttpURLConnection) url.openConnection();
            conn.connect();

            InputStream inputStream = conn.getInputStream();
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
            Bitmap bmp = BitmapFactory.decodeStream(bufferedInputStream);

            return bmp;

        }catch(IOException e){
            e.printStackTrace();
        }finally{

            conn.disconnect();
        }
        return null;
    }

    protected void onPostExecute(Bitmap result){

        if(result!=null){

            mImageView.setImageBitmap(result);
            Uri imageInternalUri = saveImageToInternalStorage(result);              
            mImageViewInternal.setImageURI(imageInternalUri);
        }else {

            // show error if any
        }
    }
 }

 protected Uri saveImageToInternalStorage(Bitmap bitmap){

    ContextWrapper wrapper = new ContextWrapper(getApplicationContext());

    File file = wrapper.getDir("Images",MODE_PRIVATE);

    file = new File(file, "yourFileUnique"+".jpg");

    try{
        OutputStream stream = null;
        stream = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.JPEG,100,stream);
        stream.flush();
        stream.close();

     }catch (IOException e) // Catch the exception
     {
        e.printStackTrace();
     }
     Uri savedImageURI = Uri.parse(file.getAbsolutePath());
     return savedImageURI;
  }

 }
...