我只是想从URL中获取一个图像,并将其显示在图像视图中。
代码:
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,我很感谢你的帮助,请在你的回答中具体点,
发布于 2012-09-04 20:47:59
您的应用程序是否配置了Internet权限?也就是说,您的应用程序清单中有以下内容吗?
<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();发布于 2012-09-04 20:46:29
发布于 2012-09-04 21:12:27
简单的方法是简单地使用setImageURI
imgView = (ImageView)findViewById(R.id.imageView1);
imgView.setImageURI(Uri.parse("http://blog.sptechnolab.com/wp-content/uploads/2011/02/c2.jpg"));然而,正如在文档中所指出的:
这会在UI线程上进行位图读取和解码,这可能会导致延迟打嗝。
如果这是个问题,您可能想要像另一个答案所建议的那样在AsyncTask中解码。
https://stackoverflow.com/questions/12271079
复制相似问题