java如何以编程方式将图像添加到安卓应用程序
我想能够使用url的图像源。我找到了以下转换为位图的函数。然而,我得到了一个“NetworkOnMainThreadException”用日志我发现了
conn.connect();
,是函数崩溃的地方
我还发现,由于这个异常,我应该使用AsyncTask类扩展。所以我在下面代码的第二部分中使用了它。我还是以同样的例外告终。我不完全明白这个错误意味着什么,只是我试图在同一时间在同一个地方做太多的事情
有没有更简单的方法将url转换为我可以使用的图像?如何修复我现在的功能
public static Bitmap getImageBitmap(String url) {
Log.i("bitmap","here?");
Bitmap bm = null;
Log.i("bitmap","here?");
try {
Log.i("bitmap","here?");
URL aURL = new URL(url);
Log.i("bitmap","here?");
URLConnection conn = aURL.openConnection();
Log.i("bitmap","last ?");
conn.connect();
Log.i("bitmap","here?");
InputStream is = conn.getInputStream();
Log.i("bitmap","here?");
BufferedInputStream bis = new BufferedInputStream(is);
Log.i("bitmap","here?");
bm = BitmapFactory.decodeStream(bis);
bis.close();
Log.i("bitmap","here?");
is.close();
Log.i("bitmap","here?");
} catch (IOException e) {
Log.e("img", "Error getting bitmap", e);
}
return bm;
}
使用异步任务:
class taskRunner extends AsyncTask<String, URL, Bitmap>{
public static Bitmap getImageBitmap(String url) {
Log.i("bitmap","here?");
Bitmap bm = null;
Log.i("bitmap","here?");
try {
Log.i("bitmap","here?");
URL aURL = new URL(url);
Log.i("bitmap","here?");
URLConnection conn = aURL.openConnection();
Log.i("bitmap","last ?");
conn.connect();
Log.i("bitmap","here?");
InputStream is = conn.getInputStream();
Log.i("bitmap","here?");
BufferedInputStream bis = new BufferedInputStream(is);
Log.i("bitmap","here?");
bm = BitmapFactory.decodeStream(bis);
bis.close();
Log.i("bitmap","here?");
is.close();
Log.i("bitmap","here?");
} catch (IOException e) {
Log.e("img", "Error getting bitmap", e);
}
return bm;
}
非常感谢您抽出时间阅读本文
# 1 楼答案
首先,不要忘记清单中的互联网许可
第二个问题是你的实现是错误的
这种说法是:
应该是这样的,希望有帮助
编辑:
AsyncTask-这是异步结构
在本例中,参数是ImageView,您还希望传递url的字符串。 结果将是位图,并将在OnPostExecute方法上设置
为了理解,我写下了上面的例子。。您可以查看下一个链接:http://chrisharrington1.wordpress.com/2012/01/24/android-setting-a-downloaded-image-to-an-imageview/
如果你还需要什么,请告诉我