繁体   English   中英

将Url转换为Uri并将其传递给AsyncTask <>

[英]Converting Url to Uri and passing it to AsyncTask<>

我通过以下方式将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

请在doInBackGround()中添加带有++++++++++++行的2条日志,并发布您的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;
}

事实证明,Locdoc01一直以来都是正确的,Uri是错误的,我要做的就是在将URL解析为Uri之前将file://附加到URL上。

像这样

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! 希望这可以帮助某人

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM