Преобразование URL-адреса в Uri и передача его в AsyncTask <> - PullRequest
0 голосов
/ 27 апреля 2018

Я конвертирую URL в Uri следующим образом

imgUrl = intent.getStringExtra(getString(R.string.selected_image));
            Log.d(TAG, "Image URL" + imgUrl);
                imageUri = Uri.parse(imgUrl) ;
            Log.d(TAG, "Image URI" + imageUri);

затем передать его этой функции

 BackgroundImageResize backgroundImageResize = new BackgroundImageResize(bitmap);
           backgroundImageResize.execute(imageUri);

и BackgroundImageResize принимает аргументы как

public class BackgroundImageResize extends AsyncTask<Uri, Integer, byte[]>

теперь этот метод

Log.d(TAG, "doInBackground: megabytes before compression: " + mBitmap.getByteCount() / 1000000 );
        bytes = getBytesFromBitmap(mBitmap, 100);
        Log.d(TAG, "doInBackground: megabytes before compression: " + bytes.length / 1000000 );

возвращает эту ошибку

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getByteCount()' on a null object reference

в предыдущих беседах с действительно умным человеком был сделан вывод, что, возможно, Uri неверен

Как передать правильный Uri?

это doInBackground () на всякий случай

@Override
    protected byte[] doInBackground(Uri... params) {
        Log.d(TAG, "doInBackground: started.");

        if(mBitmap == null){
            try{
                mBitmap = MediaStore.Images.Media.getBitmap(NextActivity.this.getContentResolver(), params[0]);
            }catch (IOException e){
                Log.e(TAG, "doInBackground: IOException: " + e.getMessage());
            }
        }
        byte[] bytes = null;
        Log.d(TAG, "doInBackground: megabytes before compression: " + mBitmap.getByteCount() / 1000000 );
        bytes = getBytesFromBitmap(mBitmap, 100);
        Log.d(TAG, "doInBackground: megabytes before compression: " + bytes.length / 1000000 );
        return bytes;
    }

Я подозреваю, что эта строка кода

mBitmap = MediaStore.Images.Media.getBitmap(NextActivity.this.getContentResolver(), params[0]);

не выполняет свою работу: P

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Итак, как оказалось, Locdoc01 был прав с самого начала, Uri был не прав, все, что мне нужно было сделать, это добавить файл: // к URL, прежде чем анализировать его в Uri ...

как это

imgUrl = intent.getStringExtra(getString(R.string.selected_image));
ImgUrlAppended = "file://" + imgUrl;
Log.d(TAG, "Image URL" + imgUrl);
imageUri = Uri.parse(ImgUrlAppended) ;
Log.d(TAG, "Image URI" + imageUri);

Изображение сжимается сейчас!

спасибо за поддержку, StackOverflow! надеюсь, это кому-нибудь поможет

0 голосов
/ 27 апреля 2018

Пожалуйста, добавьте 2 журнала с линиями ++++++++++++ в doInBackGround () и опубликуйте свой Logcat:

@Override
protected byte[] doInBackground(Uri... params) {
    Log.d(TAG, "doInBackground: started.");

    Log.d(TAG, "+++++++++++++ params[0]: " + params[0]);

    if(mBitmap == null){
        try{
            mBitmap = MediaStore.Images.Media.getBitmap(NextActivity.this.getContentResolver(), params[0]);
        }catch (IOException e){
            Log.e(TAG, "doInBackground: IOException: " + e.getMessage());
        }
    }

    Log.d(TAG, "+++++++++++++ mBitmap: " + mBitmap);

    byte[] bytes = null;
    Log.d(TAG, "doInBackground: megabytes before compression: " + mBitmap.getByteCount() / 1000000 );
    bytes = getBytesFromBitmap(mBitmap, 100);
    Log.d(TAG, "doInBackground: megabytes before compression: " + bytes.length / 1000000 );
    return bytes;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...