I am trying to display image from internet in a Gridview. When I am running my program there is not error in the catlog but no image are displayed in my screen..
ImageAdapter.java :
public class ImageAdapter extends BaseAdapter {
private Context mContext;
Bitmap bmImg;
ImageView imageView;
public String[] mThumbIds = {
"http://i724.photobucket.com/albums/ww246/bnhenson/squishy.jpg", "http://cdn4.teen.com/wp-content/uploads/2012/07/paranorman-zayn-malik-tweets.jpg",
"http://xc0.xanga.com/08fe2b7a30c37281496919/m224298958.jpg"
};
// Constructor
public ImageAdapter(Context c){
mContext = c;
}
@Override
public int getCount() {
return mThumbIds.length;
}
@Override
public Object getItem(int position) {
return mThumbIds[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
imageView = new ImageView(mContext);
downloadFile(mThumbIds[position]);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setLayoutParams(new GridView.LayoutParams(135, 135));
imageView.setPadding(0, 0, 1, 0);
return imageView;
}
void downloadFile(String fileUrl) {
AsyncTask<String, Object, String> task = new AsyncTask<String, Object, String>() {
@Override
protected String doInBackground(String... params) {
URL myFileUrl = null;
try {
myFileUrl = new URL(params[0]);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bmImg = BitmapFactory.decodeStream(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String unused) {
imageView.setImageBitmap(bmImg);
}
};
task.execute(fileUrl);
}}
AndroidGridLayoutActivity.java
public class AndroidGridLayoutActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_layout);
GridView gridView = (GridView) findViewById(R.id.grid_view);
// Instance of ImageAdapter Class
gridView.setAdapter(new ImageAdapter(this));
}}
grid_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:columnWidth="90dp"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:gravity="center"
android:stretchMode="columnWidth" >
</GridView>
And in my manifest I added this two line :
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Does anyone have an idea, what step I miss here?
Thanks in advance for your help,
Germain.
You should create a separate
ImageViewobject for every cell of your grid, not use a global variable. To do so, so something like that:To change your AsyncTask, either change the type for
paramstoObjectso you can passimageViewandfileUrltodoInBackground()or create a class for your AyncTask with a constructor you can pass both objects and store them in variables local to the AsyncTask so you can access them from thedoInBackground()method.Also note that, if you have more items in your grid, you should reuse the passed in
convertViewwhen it has a non-null value.