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
(classAsyncTaskLoadPhoto
,方法-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) {
}
});