BitmapFactory返回null位图

我试图从StaticConfig.getMyUser().getAvatar()的URL中获取位图。 url如下: "android/photo.jpg"

当我使用下面的代码时, src为空。 我不知道为什么。 我目前正在研究这个链接,但我仍然无能为力。

 private void setImageAvatar(Context context){ Resources res = getResources(); Bitmap src; byte[] decodedString = Base64.decode(StaticConfig.getMyUser().getAvatar(), Base64.DEFAULT); src = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); if(src == null){ Log.e("UserProf","src is null"); } // code to do something with src here } 

正如其他人所建议的,理想的方式是使用毕加索或滑翔 。

因为它处理很多事情,从缓存到内存优化。 例如。 与滑翔,你只需要写

 Glide.with(context) .load("android/photo.jpg") .into(imgview); 

或者如果你想手动写入,你可以使用下面的方法。 imageview是初始化Imageview的实例。

 public void setBitmapFromNetwork(){ Runnable runnable = new Runnable() { Bitmap bitmap = null; @Override public void run() { try { bitmap = getBitmapFromLink(); } catch (IOException e) { e.printStackTrace(); } imageview.post(new Runnable() { @Override public void run() { imageview.setImageBitmap(bitmap); }}); }}; new Thread(runnable).start(); } public Bitmap getBitmapFromLink() throws IOException{ HttpURLConnection conn =(HttpURLConnection) new URL("android/photo.jpg").openConnection()); conn.setDoInput(true); InputStream ism = conn.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(ism); if (ism != null) { ism .close(); } return bitmap; } 

并且请确保您已经获得了清单中的Internet许可。

首先,你需要从该url下载图片。 最好使用像Glide这样的图像加载器

或毕加索

以防万一你想使用kotlin版本。

 class SetBitmapFromNetwork(img: ImageView?): AsyncTask() { var img:ImageView? = img override fun doInBackground(vararg p0: Void?): Bitmap { val conn: HttpURLConnection = (URL("android/photo.jpg").openConnection()) as HttpURLConnection conn.doInput = true val ism: InputStream = conn.inputStream return BitmapFactory.decodeStream(ism) } override fun onPostExecute(result: Bitmap?) { super.onPostExecute(result) img?.setImageBitmap(result) } } 

只要称呼,

 SetBitmapFromNetwork(img).execute()