在使用Picasso进行转换时,Android应用程序会崩溃

时间:2015-07-20 14:50:02

标签: android image picasso

我构建了一个应用程序,其中一些用户(管理员)可以登录我的网页上的管理员帐户并更改一些内容,例如应用程序中的背景图像。作为后端,我正在使用Parse.com,应用程序从那里加载其背景图像。我正在使用Picasso在应用程序中加载背景图像。在某些活动中,我希望背景模糊,因此我使用this模糊转换并使用以下代码加载图像:

int apiVersion = android.os.Build.VERSION.SDK_INT;
        if(apiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
            // Blur the image
            final BlurTransformation blurTransformation = new BlurTransformation(this, 20);
            // Load the background image with blur
            Picasso.with(this)
                    .load(backgroundPictureURL)
                    .transform(blurTransformation)
                    .into(backgroundView);
        } else {
            // Load the background image without blur
            Picasso.with(this)
                    .load(backgroundPictureURL)
                    .into(backgroundView);
        }

我已经使用Parse启用了崩溃报告,现在我正在获取有关应用程序在尝试应用模糊转换时崩溃的报告。这是我收到的堆栈跟踪:

java.lang.RuntimeException: Transformation blurred crashed with exception.
com.squareup.picasso.BitmapHunter$3.run                                         BitmapHunter.java:434
android.os.Handler.handleCallback                                               Handler.java:739
android.os.Handler.dispatchMessage                                              Handler.java:95
android.os.Looper.loop                                                          Looper.java:135
android.app.ActivityThread.main                                                 ActivityThread.java:5254
java.lang.reflect.Method.invoke                                                 Native Method
java.lang.reflect.Method.invoke                                                 Method.java:372
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run                      ZygoteInit.java:898
com.android.internal.os.ZygoteInit.main                                         ZygoteInit.java:693
Caused by: android.renderscript.RSIllegalArgumentException: Bitmap has an unsupported format for this operation
android.renderscript.Allocation.validateBitmapFormat                            Allocation.java:537
android.renderscript.Allocation.copyTo                                          Allocation.java:1257
se.myapplication.main.CustomUI.BlurTransformation.transform                       BlurTransformation.java:60
com.squareup.picasso.BitmapHunter.applyCustomTransformations                    BitmapHunter.java:429
com.squareup.picasso.BitmapHunter.hunt                                          BitmapHunter.java:238
com.squareup.picasso.BitmapHunter.run                                           BitmapHunter.java:159
java.util.concurrent.Executors$RunnableAdapter.call                             Executors.java:422
java.util.concurrent.FutureTask.run                                             FutureTask.java:237
java.util.concurrent.ThreadPoolExecutor.runWorker                               ThreadPoolExecutor.java:1112
java.util.concurrent.ThreadPoolExecutor$Worker.run                              ThreadPoolExecutor.java:587
java.lang.Thread.run                                                            Thread.java:818
com.squareup.picasso.Utils$PicassoThread.run                                    Utils.java:411

堆栈跟踪引用的Blur Transformation类中的代码行是这一行:

output.copyTo(blurredBitmap);

图片格式是jpg或png,在我的手机和模拟器上尝试时,没有问题,所以一些用户似乎只发生了崩溃,他们似乎有Android 5.0.1和5.0.2(就像我一样,对我来说没有问题)。

我无处可去,所以任何帮助都表示赞赏!什么可能导致问题,我该如何解决?

2 个答案:

答案 0 :(得分:0)

从您的错误日志中

Caused by: android.renderscript.RSIllegalArgumentException: Bitmap has an unsupported format for this operation

他们使用的是Bitmap图片。尽管通常你可以在应用操作之前检查元数据,但大多数服务都没有,它们只是按文件名过滤(如* .img,* .jpg,* .png)。

我一直在一个项目中,有时文件是以某种方式生成的,然后重新呈现为bmp,以提高他们的质量"。虽然图像是bmp编码的,但它们仍保留为.jpg名称。据我所知,这似乎很常见,特别是从互联网上拍摄的图像(名称和内容不匹配)

答案 1 :(得分:0)

MarcinKoziński在this post的步骤5和6中找到了解决方案!