Android AsyncTask用于从facebook加载照片-始终返回null

Android AsyncTask用于从facebook加载照片-始终返回null,android,android-asynctask,kotlin,inputstream,httpurlconnection,Android,Android Asynctask,Kotlin,Inputstream,Httpurlconnection,我正在使用AsyncTask从Facebook加载照片。 主要问题是bitmapProf(classAsyncTaskLoadPhoto,方法-doInBackground)总是返回null。 我使用调试器和日志搜索错误,但找不到错误 这是我的密码: private lateinit var imgProfile: ImageView override fun onCreate(savedInstanceState: Bundle?) { ..... loadImg()

我正在使用
AsyncTask
从Facebook加载照片。 主要问题是
bitmapProf
(class
AsyncTaskLoadPhoto
,方法-
doInBackground
)总是返回
null
。 我使用调试器和日志搜索错误,但找不到错误

这是我的密码:

  private lateinit var imgProfile: ImageView

  override fun onCreate(savedInstanceState: Bundle?) {
    .....
    loadImg()
    }
  }

  fun loadImg() {
    var loadPhoto = AsyncTaskLoadPhoto()
    var bitmap: Bitmap?
    loadPhoto.execute()
    bitmap = loadPhoto.get()
    Log.i("TAG", bitmap.toString())
    imgProfile.setImageBitmap(bitmap)
 }

}

class AsyncTaskLoadPhoto : AsyncTask<Void, Void, Bitmap?>() {

 override fun doInBackground(vararg p0: Void): Bitmap? {
    var bitmapProf: Bitmap? = null
    try {
      val stringURL = "http://graph.facebook.com/"+"userID"+"/picture?width=150&width=150"
      val imgURL = URL(stringURL)
      val connection: HttpURLConnection = imgURL.openConnection() as HttpURLConnection
      connection.doInput = true
      connection.connect()
      val inputStream = connection.inputStream
      bitmapProf = BitmapFactory.decodeStream(inputStream)
    } catch (e: Exception) {
      e.printStackTrace()
     }
    return bitmapProf
 }
private lateinit var imgProfile:ImageView
重写创建时的乐趣(savedInstanceState:Bundle?){
.....
loadImg()
}
}
fun loadImg(){
var loadPhoto=AsyncTaskLoadPhoto()
位图:位图?
loadPhoto.execute()
位图=loadPhoto.get()
Log.i(“标记”,位图.toString())
imgProfile.setImageBitmap(位图)
}
}
类AsyncTaskLoadPhoto:AsyncTask(){
覆盖有趣的背景(vararg p0:Void):位图{
var bitmapProf:位图?=null
试一试{
val stringURL=”http://graph.facebook.com/“+”用户ID“+”/picture?宽度=150&width=150”
val imgURL=URL(stringURL)
val connection:HttpURLConnection=imgURL.openConnection()作为HttpURLConnection
connection.doInput=true
connection.connect()
val inputStream=connection.inputStream
bitmapProf=BitmapFactory.decodeStream(inputStream)
}捕获(e:例外){
e、 printStackTrace()
}
返回bitmapProf
}
您正在吞咽异常,甚至没有日志语句。
e.printStackTrace()
在Android中没有可见的效果。然后您的方法返回
null


作为参考,如果您采用Kotlin协程,您的代码将变得多么简单:

class MyActivity : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        launch(UI) {
            try {
                imgProfile.setImageBitmap(loadImg())
            } catch (e: Exception) {
                // handle it here
            }
        }
    }

    private suspend fun loadImg(): Bitmap = withContext(CommonPool) {
        val stringURL = "http://graph.facebook.com/userID/picture?width=150&width=150"
        val imgURL = URL(stringURL)
        val connection = imgURL.openConnection() as HttpURLConnection
        connection.connect()
        BitmapFactory.decodeStream(connection.inputStream)
    }
}
此代码尚未清除,您必须检查
连接。responseCode
以查看输入流是否包含图像数据或只是一些错误消息。

请尝试此代码:

ImageLoader.getInstance().displayImage(imgurl, image_propertypic, new ImageLoadingListener() {
                        @Override
                        public void onLoadingStarted(String imageUri, View view) {

                        }

                        @Override
                        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                        }

                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                            image_propertypic.setImageBitmap(loadedImage);
                        }

                        @Override
                        public void onLoadingCancelled(String imageUri, View view) {

                        }
                    });

我不确定kotlin的情况,但对于java,您不能再将asynctask用于web调用
ImageLoader.getInstance().displayImage(imgurl, image_propertypic, new ImageLoadingListener() {
                        @Override
                        public void onLoadingStarted(String imageUri, View view) {

                        }

                        @Override
                        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                        }

                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                            image_propertypic.setImageBitmap(loadedImage);
                        }

                        @Override
                        public void onLoadingCancelled(String imageUri, View view) {

                        }
                    });