Загрузка изображения из внутреннего хранилища на сервер [ошибка] - PullRequest
0 голосов
/ 04 октября 2018

У меня есть код, который загружает изображение из внутреннего хранилища на сервер

Handler handler1 = new Handler();
        Context c = data_syncing.this;
        final File directory = c.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        final File[] files = directory.listFiles();
        final int x = files.length;
        int i;
        for (i = 0; i < files.length; i++) {
            final int finalI = i;
            final int finalI1 = i;
            final int finalI2 = i;
            handler1.postDelayed(new Runnable() {
                @Override
                public void run() {
                    imgPath = directory + "/" + files[finalI].getName();
                    if (!imgPath.contains(".png")) {
                        fileName = files[finalI].getName();
                        image_view.setImageBitmap(BitmapFactory.decodeFile(imgPath));
                        image_view.buildDrawingCache();
                        Bitmap bitmap = ((BitmapDrawable) image_view.getDrawable()).getBitmap();

                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);
                        byte[] image = stream.toByteArray();
                        ConvertImage = Base64.encodeToString(image, Base64.DEFAULT);
                        StringRequest stringRequest = new StringRequest(Method.POST, SYNC_IMAGES,
                                new Response.Listener<String>() {
                                    @Override
                                    public void onResponse(String response) {
                                    }
                                }, new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                            }
                        }) {
                            @Override
                            protected Map<String, String> getParams() throws AuthFailureError {
                                Map<String, String> params = new HashMap<>();
                                params.put("image_tag", fileName.toString());
                                params.put("image_data", ConvertImage.toString());
                                return params;
                            }
                        };
                        VolleySingleton.getInstance(data_syncing.this).addToRequestQueue(stringRequest);
                    }
                }
            }, 1000 * i);
        }

, но у меня есть несколько ошибок здесь.

  1. Failed to allocate a 84652044 byte allocation with 4187552 free bytes and 73MB until OOM
  2. Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference

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

Мой вопрос: как я могу загрузить свои изображения из внутреннего хранилища на сервер, а также как проверить, завершен ли цикл?

кстати вот мой php

<?php
  ini_set('display_errors', 1);
  ini_set('display_startup_errors', 1);
  error_reporting(E_ALL);
  include_once('conn.php');

  if($_SERVER['REQUEST_METHOD'] == 'POST') {
    $DefaultId = 0;
    $ImageData = $_POST['image_data'];
    $ImageName = $_POST['image_tag'];
    $ImagePath = "upload/$ImageName";
    $ServerURL = "=AwesomeLinkHere/$ImagePath";
    $InsertSQL = "REPLACE INTO upload (image_path,imagename) values('$ServerURL','$ImageName')";

    if(mysqli_query($con, $InsertSQL)){
      file_put_contents($ImagePath,base64_decode($ImageData));
      echo "Your Image Has Been Uploaded.";
      mysqli_close($conn);
    }else{
      echo "Please Try Again";
    }
  }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...