亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android從URL加載到Bitmap

Android從URL加載到Bitmap

滄海一幻覺 2019-09-02 09:53:55
我有一個關于從網站加載圖像的問題。我使用的代碼是:Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth();int height = display.getHeight();Bitmap bit=null;try {    bit = BitmapFactory.decodeStream((InputStream)new URL("http://www.mac-wallpapers.com/bulkupload/wallpapers/Apple%20Wallpapers/apple-black-logo-wallpaper.jpg").getContent());} catch (Exception e) {}Bitmap sc = Bitmap.createScaledBitmap(bit,width,height,true);canvas.drawBitmap(sc,0,0,null);但它總是返回一個空指針異常,程序崩潰了。該URL有效,似乎適用于其他所有人。我正在使用2.3.1。
查看完整描述

3 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

public static Bitmap getBitmapFromURL(String src) {

    try {

        URL url = new URL(src);

        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        connection.setDoInput(true);

        connection.connect();

        InputStream input = connection.getInputStream();

        Bitmap myBitmap = BitmapFactory.decodeStream(input);

        return myBitmap;

    } catch (IOException e) {

        // Log exception

        return null;

    }

}


查看完整回答
反對 回復 2019-09-02
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

如果您使用Picasso或Glide或Universal-Image-Loader從網址加載圖像。

您可以簡單地獲取加載的位圖


畢加索 (當前版本2.71828)


Java代碼


Picasso.get().load(imageUrl).into(new Target() {

    @Override

    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {

        // loaded bitmap is here (bitmap)

    }


    @Override

    public void onBitmapFailed(Drawable errorDrawable) { }


    @Override

    public void onPrepareLoad(Drawable placeHolderDrawable) {}

});

Kotlin代碼


Picasso.get().load(url).into(object : com.squareup.picasso.Target { 

    override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {

         // loaded bitmap is here (bitmap)

    }


    override fun onPrepareLoad(placeHolderDrawable: Drawable?) {}


    override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {}

})

對于Glide

Check 如何使用滑動將圖像下載到位圖中?


對于Universal-Image-Loader

Java代碼


imageLoader.loadImage(imageUrl, new SimpleImageLoadingListener() 

{

    @Override

    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) 

    {

         // loaded bitmap is here (loadedImage)

    }

});


查看完整回答
反對 回復 2019-09-02
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

我喜歡這些:


從InputStream創建Bitmap并返回它:


    public static  Bitmap downloadImage(String url) {

        Bitmap bitmap = null;

        InputStream stream = null;

        BitmapFactory.Options bmOptions = new BitmapFactory.Options();

        bmOptions.inSampleSize = 1;


        try {

            stream = getHttpConnection(url);

            bitmap = BitmapFactory.decodeStream(stream, null, bmOptions);

            stream.close();

        }

        catch (IOException e1) {

            e1.printStackTrace();

            System.out.println("downloadImage"+ e1.toString());

        }

        return bitmap;

    }


  // Makes HttpURLConnection and returns InputStream


 public static  InputStream getHttpConnection(String urlString)  throws IOException {


        InputStream stream = null;

        URL url = new URL(urlString);

        URLConnection connection = url.openConnection();


        try {

            HttpURLConnection httpConnection = (HttpURLConnection) connection;

            httpConnection.setRequestMethod("GET");

            httpConnection.connect();


            if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {

                stream = httpConnection.getInputStream();

            }

        }

        catch (Exception ex) {

            ex.printStackTrace();

            System.out.println("downloadImage" + ex.toString());

        }

        return stream;

    }

請記?。?/p>


Android包括兩個HTTP客戶端:HttpURLConnection和Apache HTTP Client。 對于姜餅和后來,HttpURLConnection是最好的選擇。


從Android 3.x Honeycomb或更高版本,您無法在UI線程上執行網絡IO并執行此操作會拋出android.os.NetworkOnMainThreadException。您必須使用Asynctask,如下所示


/**     AsyncTAsk for Image Bitmap  */

    private class AsyncGettingBitmapFromUrl extends AsyncTask<String, Void, Bitmap> {



        @Override

        protected Bitmap doInBackground(String... params) {


            System.out.println("doInBackground");


            Bitmap bitmap = null;


            bitmap = AppMethods.downloadImage(params[0]);


            return bitmap;

        }


        @Override

        protected void onPostExecute(Bitmap bitmap) {


            System.out.println("bitmap" + bitmap);


        }

    }


查看完整回答
反對 回復 2019-09-02
  • 3 回答
  • 0 關注
  • 1395 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號