将 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() 和 post 中添加带有 ++++++++++++ 行的 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 是错误的,我所要做的就是将 file:// 添加到 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);
图像现在压缩!
感谢您的所有支持,Whosebug!
希望这对某人有帮助
我正在通过以下方式将 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() 和 post 中添加带有 ++++++++++++ 行的 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 是错误的,我所要做的就是将 file:// 添加到 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);
图像现在压缩!
感谢您的所有支持,Whosebug! 希望这对某人有帮助