我正在为我的项目制作演示。
XML文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<ImageView
android:id="@+id/imageview"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:visibility="visible"
android:layout_gravity="center"
android:contentDescription="@string/content_description"
/>
</LinearLayout>
我的Activity
跟随将图片加载到ImageView
。
实现AsyncTask
作为内部类。
public class LoadImageActivity extends Activity {
ImageView image ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.load_image);
image = (ImageView)findViewById(R.id.imageview);
String url = "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png";
LoadImageAsync loadImageAsync = new LoadImageAsync(url, image);
loadImageAsync.execute(url);
}
在Activity
的{{1}}方法中,我调用了onCreate
来加载图片
AsyncTask
在@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.load_image);
image = (ImageView)findViewById(R.id.imageview);
String url = "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png";
LoadImageAsync loadImageAsync = new LoadImageAsync(url, image);
loadImageAsync.execute(url);
}
课程中,我有以下代码,我遵循the Stack Overflow link related to this。
我在AsyncTask类下面实现了Activity类的内部类。
AsyncTask
我做错了什么?还是错过了什么?
处理图像时需要考虑什么?
此后将转移到使用public class LoadImageAsync extends AsyncTask<String, Void, Bitmap>{
private String url;
private ImageView imageView;
public LoadImageAsync(String url, ImageView imageView) {
this.url = url;
this.imageView = imageView;
}
@Override
protected Bitmap doInBackground(String... params) {
try {
URL urlConnection = (URL) new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) urlConnection
.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap result) {
imageView.setImageBitmap(result);
super.onPostExecute(result);
}
}
加载图片。
答案 0 :(得分:1)
我建议使用毕加索 Picasso.with(上下文).load(&#34; http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png&#34)。到(图像);
所以你不必担心当你在GridView中实现它时很可能发生的OutMemoryException
答案 1 :(得分:0)
问题可能出在ImageView
焦点上。尝试致电requestLayout
和/或invalidate
:
@Override
protected void onPostExecute(Bitmap result) {
imageView.requestLayout();
imageView.setImageBitmap(result);
imageView.invalidate(); //try this if it still not working
super.onPostExecute(result);
}
答案 2 :(得分:0)
使用AQuery从网址加载图片:
AQuery aq = new AQuery(context);
aq.ajax(url, Bitmap.class, new AjaxCallback<Bitmap>() {
@Override
public void callback(String url, Bitmap object, AjaxStatus status) {
imageView.setImageBitmap(object);
}
});
或强>
aq.id(imageView).image(url,true,true);
注意:请检查更多选项,以改善图像加载,缓存等。