尝试通过Picasso获取图像时的Android Studio OutOfMemoryError

时间:2016-06-06 18:33:54

标签: android android-studio out-of-memory picasso

编辑:显然我试图使用的图像太大了。无论如何我可以绕过这个?我试图最终裁剪它们并以编程方式将它们设置为我的壁纸。我尝试过较小的图像并且可以正常工作。有关更大图像的任何提示吗?

所以我试图使用Picasso从网址获取图片,但是当我使用.get()方法时,我得到了这个:

java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:300)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.OutOfMemoryError
    at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
    at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:601)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:577)
    at com.squareup.picasso.BitmapHunter.decodeStream(BitmapHunter.java:142)
    at com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:217)
    at com.squareup.picasso.RequestCreator.get(RequestCreator.java:385)

我在AsyncTask中执行Picasso代码,因为我有一些网络代码来获取我需要的url。但是,即使我将所有内容都注释掉并直接将其提供给毕加索,问题仍然存在。随着一切被注释掉,我的代码看起来像这样:

protected Bitmap doInBackground(String... name) {
    try {
         return Picasso.with(myContext)
                .load("https://i.redd.it/4l2boppcmn1x.jpg")
                .get();

    } catch (Exception e) {
        android.util.Log.e(TAG, "Failed to retrieve submissions", e);
        return null;
    }
}

我已经尝试了我能想到的一切,包括增加堆大小,将manifestHeap标记添加到清单等等。这是我的代码还是Android Studio的问题?在我的应用程序运行时使用内存监视器时,它说" Free [0.35 MB]分配[15.02 MB]"在我做任何事之前。那可能是对的吗?我对这一切还不熟悉所以如果我误解了什么,请告诉我。感谢。

1 个答案:

答案 0 :(得分:0)

使用Picasso调整大小

return Picasso.with(myContext)
                .load("https://i.redd.it/4l2boppcmn1x.jpg")
                .resize(500, 300)
                .get();