在android网格中显示图像

在android网格中显示图像,android,gridview,Android,Gridview,我是android新手,所以请耐心等待,我正在创建此代码以绘制图像的gridview,我正在使用asynctask,但我的问题是asynctask正在运行,因此绑定图像会很晚,并且图像不会显示,当我调试时,它会显示出来,因为我延迟了它,所以我知道问题所在,但我希望有人能为我修复语法,非常感谢 import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.

我是android新手,所以请耐心等待,我正在创建此代码以绘制图像的gridview,我正在使用asynctask,但我的问题是asynctask正在运行,因此绑定图像会很晚,并且图像不会显示,当我调试时,它会显示出来,因为我延迟了它,所以我知道问题所在,但我希望有人能为我修复语法,非常感谢

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListAdapter;

public class ImagesAdapter extends BaseAdapter implements ListAdapter {
private Context mContext;
ImageView currentImageView;
Bitmap bmImg;

// Constructor
public ImagesAdapter(Context c) {
    super();
    mContext = c;
    GridViewConfig.addImageUrls();
}

@Override
public int getCount() {
    return GridViewConfig.getResim_list().size();
}

@Override
public Object getItem(int position) {
    return GridViewConfig.getResim_list().get(position);

}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ImageView imageView;

    if (convertView == null)

    {

        imageView = new ImageView(mContext);

        imageView.setLayoutParams(new GridView.LayoutParams(100, 100));

        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

        imageView.setPadding(5, 5, 5, 5);

    } else {

        imageView = (ImageView) convertView;

    }
    downloadFile(GridViewConfig.getResim_list().get(position));

    imageView.setImageBitmap(bmImg);

    // imageView.setImageDrawable(LoadImageFromURL(GridViewConfig
    // .getResim_list().get(position)));

    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) {
        /*  if (currentImageView == null) {
                currentImageView = new ImageView(mContext);
            }
            currentImageView.setImageBitmap(bmImg); */
        }
    };
    task.execute(fileUrl);

}
import java.io.IOException;
导入java.io.InputStream;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.graphics.drawable.drawable;
导入android.os.AsyncTask;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.GridView;
导入android.widget.ImageView;
导入android.widget.ListAdapter;
公共类ImagesAdapter扩展BaseAdapter实现ListAdapter{
私有上下文;
ImageView当前ImageView;
位图bmImg;
//建造师
公共图像适配器(上下文c){
超级();
mContext=c;
GridViewConfig.addImageUrls();
}
@凌驾
public int getCount(){
返回GridViewConfig.getResim_list().size();
}
@凌驾
公共对象getItem(int位置){
返回GridViewConfig.getResim_list().get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
if(convertView==null)
{
imageView=新的imageView(mContext);
setLayoutParams(新的GridView.LayoutParams(100100));
imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
设置填充(5,5,5,5);
}否则{
imageView=(imageView)convertView;
}
下载文件(GridViewConfig.getResim_list().get(position));
设置图像位图(bmImg);
//setImageDrawable(LoadImageFromURL(GridViewConfig
//.getResim_list().get(position));
返回图像视图;
}
无效下载文件(字符串文件URL){
AsyncTask任务=新建AsyncTask(){
@凌驾
受保护的字符串doInBackground(字符串…参数){
URL myFileUrl=null;
试一试{
myFileUrl=新URL(参数[0]);
}捕获(格式错误){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
HttpURLConnection conn=(HttpURLConnection)myFileUrl
.openConnection();
conn.setDoInput(真);
连接();
InputStream is=conn.getInputStream();
bmImg=BitmapFactory.decodeStream(is);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回null;
}
受保护的void onPostExecute(字符串未使用){
/*如果(currentImageView==null){
currentImageView=新的ImageView(mContext);
}
currentImageView.setImageBitmap(bmImg)*/
}
};
任务执行(文件URL);
}
gridviewconfig类返回所需的图像。

看看有一个BitmapFun示例项目/应用程序,其中包含网格和许多有用的东西。我建议您不要重新发明轮子,而是使用Android的创建者google代码

我还建议您研究一些懒散列表实现

为什么要在
getView()中运行
下载文件(GridViewConfig.getResim_list().get(position));
及其调用的
void downloadFile(String fileUrl)
?本质上,每次
列表视图
滚动时,您都会再次下载图像。不,图像不在其中,它不在方法之内。我也是android新手,所以如果您纠正我的错误,我会很有帮助。不幸的是,他们没有提供如何从在线URL获取图像的方法,我已经实现了类似的代码。他们已经实现了,有一个class具有图像的http URL,您应该将其替换为您自己的集合。