我只想从网址抓取图片并将其显示在图片视图中
代码:
public class MainActivity extends Activity {
// declare internal using controls
private TextView txtUrl;
private ImageView imgView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgView =(ImageView)findViewById(R.id.imageView1);
Drawable drawable=null;
drawable = grabImageFromUrl("http://blog.sptechnolab.com/wp-content/uploads/2011/02/c2.jpg");
imgView.setImageDrawable(drawable);
}
private Drawable grabImageFromUrl(String url) {
try {
return Drawable.createFromStream((InputStream)new URL(url).getContent(), "src");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
我遇到此错误:
09-04 20:34:18.712: E/AndroidRuntime(1156): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: android.os.NetworkOnMainThreadException
非常感谢您的帮助,请具体说明您的答案
答案 0 :(得分:3)
您的应用是否配置了互联网权限?也就是说,你的应用程序清单中是否有以下内容?
<uses-permission android:name="android.permission.INTERNET" />
关注:此外,错误似乎是说您不应该在应用的UI线程上进行网络访问。在应用程序的UI线程上执行任何长时间阻塞I \ O通常是一种不好的做法。尝试使用AnycTask,或者您甚至可以查看LazyList中的部分代码。
示例:将此作为内部类添加到您的活动中:
private class DownloadTask extends AsyncTask<Void, Void, Drawable>{
private final String mUrl;
public DownloadTask(String url){
mUrl = url;
}
@Override
protected Drawable doInBackground(Void... params) {
try {
return Drawable.createFromStream((InputStream)new URL(mUrl).getContent(), "src");
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(Drawable result){
((ImageView)findViewById(R.id.imageView1)).setImageDrawable(result);
}
}
然后从你的onCreate中调用它:
new DownloadTask(url).execute();
答案 1 :(得分:0)
答案 2 :(得分:0)
简单方法是使用setImageURI
:
imgView = (ImageView)findViewById(R.id.imageView1);
imgView.setImageURI(Uri.parse("http://blog.sptechnolab.com/wp-content/uploads/2011/02/c2.jpg"));
正如文档中所述:
这会在UI线程上进行Bitmap读取和解码,这会导致延迟打嗝。
如果这是一个问题,您可能希望按照另一个答案的建议在AsyncTask
中进行解码。