簡體   English   中英

使用解碼流將字符串url轉換為位圖

[英]convert string url to bitmap with decode stream

在這里,我試圖將圖像的URL轉換為位圖,以便可以在網格視圖中顯示。 log.d部分工作正常,我以字符串格式ady成功獲得了我的圖像url,但是當涉及到解碼流部分時,它發生了錯誤。

public class StringtoBitmap extends AsyncTask<String, String, Bitmap> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Bitmap s) {
        super.onPostExecute(s);
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        try {
            String src = params[0];
            Log.d("SRC", src);
            URL url = new URL(src);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            input.reset();
            return myBitmap;

        } catch (Exception e) {
            System.out.println(e);
            return null;
        }
    }
    public void StringtoBitmap(String img) {
        new StringtoBitmap().execute(img);
    }
}

android監控結果的某些部分:

05-09 02:56:21.408 11585-11671/com.comma.androidapp1 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
                                                                       Process: com.comma.androidapp1, PID: 11585
                                                                       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:613)
                                                                           at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:589)
                                                                           at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:627)
                                                                           at com.comma.androidapp1.StringtoBitmap.doInBackground(StringtoBitmap.java:39)
                                                                           at com.comma.androidapp1.StringtoBitmap.doInBackground(StringtoBitmap.java:17)
                                                                           at android.os.AsyncTask$2.call(AsyncTask.java:288)
                                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                           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) 


                                                                       [ 05-09 02:56:21.418  1556: 1711 D/         ]


    HostConnection::get() New Host Connection established 0xb86734b0, tid 1711

您遇到內存不足錯誤,您的位圖大小過大,請輸入以下代碼來解決內存不足錯誤

   BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap preview_bitmap = BitmapFactory.decodeStream(is, null, options);

最好將GlidePicasso之類的庫用於所有圖像操作(解碼,調整大小,下載等):

用本地文件夾路徑或服務器URL替換路徑

依賴關系

compile 'com.github.bumptech.glide:glide:3.5.2'

Glide.with (context).load (path).into(imageView);

使用Glide將位圖加載到ImageView中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM