[英]Returning Bitmap from object URL
我想编写一个从对象URL返回位图图像的方法。 但是它给NetworkOnMainThreadException错误。
Image.java:
package gc.x.models;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;
import com.google.gson.annotations.SerializedName;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import gc.x.R;
/**
* Created by ASUS on 4.10.2016.
*/
public class Image {
public String albumId;
public String id;
public String title;
public String url;
public String thumbnailUrl;
public Bitmap getBitmapFromURL() {//get bitmap of thumbnail from thumbnailurl
try {
URL url = new URL(this.thumbnailUrl);
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;
}
}
}
我不想简单地从url中显示位图图像,因为代码结构不同。为避免混淆,我没有共享我的所有代码。 我只想编写一个从对象的thumbnailurl获取位图的方法。 稍后,我将使用此方法。 我从http://jsonplaceholder.typicode.com/获得图像
您不能在主线程中执行此网络任务,而必须在Async任务中编写此任务。
在类中编写此代码
private class AsyncClass extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
getBitmapFromURL();
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
并这样称呼它
new AsyncClass().execute("");
您的问题是您正在使用主线程进行网络操作...此外,我建议使用图像加载框架来实现该目标,即使用Glide ..并在一行中具有该位图。 您不需要解决mainThread ..因为Glide会为您解决这个问题。只需专注于您的代码即可。
Bitmap theBitmap = Glide.with(this).
load("http://...."). // or url
asBitmap().
into(100, 100). // Width and height
get();
您需要在后台线程中执行此操作。 请参阅我的答案以获取Android中代码文件上传到服务器的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.