Java 在listview中缓存json中的图像?

Java 在listview中缓存json中的图像?,java,android,json,Java,Android,Json,我上了这节课,讲的是json解析和列表视图中的图像加载。这个例子很好,但是在imageview中,当上下滚动所有图像时,它有一个问题,所以有人能解决这个问题吗 这是listview的适配器 package com.wingnity.jsonparsingtutorial; import java.io.InputStream; import java.util.ArrayList; import android.content.Context; import android.grap

我上了这节课,讲的是json解析和列表视图中的图像加载。这个例子很好,但是在imageview中,当上下滚动所有图像时,它有一个问题,所以有人能解决这个问题吗

这是listview的适配器

    package com.wingnity.jsonparsingtutorial;

import java.io.InputStream;
import java.util.ArrayList;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ActorAdapter extends ArrayAdapter<Actors> {
    ArrayList<Actors> actorList;
    LayoutInflater vi;
    int Resource;
    ViewHolder holder;

    public ActorAdapter(Context context, int resource, ArrayList<Actors> objects) {
        super(context, resource, objects);
        vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        Resource = resource;
        actorList = objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // convert view = design
        View v = convertView;
        if (v == null) {
            holder = new ViewHolder();
            v = vi.inflate(Resource, null);
            holder.imageview = (ImageView) v.findViewById(R.id.ivImage);
            holder.tvName = (TextView) v.findViewById(R.id.tvName);
            holder.tvDescription = (TextView) v.findViewById(R.id.tvDescriptionn);
            holder.tvDOB = (TextView) v.findViewById(R.id.tvDateOfBirth);
            holder.tvCountry = (TextView) v.findViewById(R.id.tvCountry);
            holder.tvHeight = (TextView) v.findViewById(R.id.tvHeight);
            holder.tvSpouse = (TextView) v.findViewById(R.id.tvSpouse);
            holder.tvChildren = (TextView) v.findViewById(R.id.tvChildren);
            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }
        holder.imageview.setImageResource(R.drawable.ic_launcher);
        new DownloadImageTask(holder.imageview).execute(actorList.get(position).getImage());
        holder.tvName.setText(actorList.get(position).getName());
        holder.tvDescription.setText(actorList.get(position).getDescription());
        holder.tvDOB.setText("B'day: " + actorList.get(position).getDob());
        holder.tvCountry.setText(actorList.get(position).getCountry());
        holder.tvHeight.setText("Height: " + actorList.get(position).getHeight());
        holder.tvSpouse.setText("Spouse: " + actorList.get(position).getSpouse());
        holder.tvChildren.setText("Children: " + actorList.get(position).getChildren());
        return v;

    }

    static class ViewHolder {
        public ImageView imageview;
        public TextView tvName;
        public TextView tvDescription;
        public TextView tvDOB;
        public TextView tvCountry;
        public TextView tvHeight;
        public TextView tvSpouse;
        public TextView tvChildren;

    }

    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        ImageView bmImage;

        public DownloadImageTask(ImageView bmImage) {
            this.bmImage = bmImage;
        }
        protected Bitmap doInBackground(String... urls) {
            String urldisplay = urls[0];
            Bitmap mIcon = null;
            try {
                InputStream in = new java.net.URL(urldisplay).openStream();
                mIcon = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return mIcon;
        }

        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
    }
}
package com.wingnity.jsonparsingtutorial;
导入java.io.InputStream;
导入java.util.ArrayList;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.os.AsyncTask;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
公共类ActoradPter扩展ArrayAdapter{
ArrayList actorList;
拉平机vi;
智力资源;
视窗座;
公共Actorapter(上下文、int资源、ArrayList对象){
超级(上下文、资源、对象);
vi=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
资源=资源;
actorList=对象;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//转换视图=设计
视图v=转换视图;
如果(v==null){
holder=新的ViewHolder();
v=vi.充气(资源,空);
holder.imageview=(imageview)v.findViewById(R.id.ivImage);
holder.tvName=(TextView)v.findViewById(R.id.tvName);
holder.tvDescription=(TextView)v.findViewById(R.id.tvDescriptionn);
holder.tvDOB=(TextView)v.findviewbyd(R.id.tvDateOfBirth);
holder.tvCountry=(TextView)v.findViewById(R.id.tvCountry);
holder.tvHeight=(TextView)v.findViewById(R.id.tvHeight);
holder.TVparty=(TextView)v.findViewById(R.id.TVparty);
holder.tvChildren=(TextView)v.findViewById(R.id.tvChildren);
v、 setTag(支架);
}否则{
holder=(ViewHolder)v.getTag();
}
holder.imageview.setImageResource(R.drawable.ic_启动器);
新建下载的ImageTask(holder.imageview).execute(actorList.get(position.getImage());
holder.tvName.setText(actorList.get(position.getName());
holder.tvDescription.setText(actorList.get(position.getDescription());
holder.tvDOB.setText(“B'day:+actorList.get(position.getDob());
holder.tvCountry.setText(actorList.get(position.getCountry());
holder.tvHeight.setText(“高度:+actorList.get(位置).getHeight());
holder.tvpament.setText(“配偶:+actorList.get(position.getspament());
holder.tvChildren.setText(“Children:+actorList.get(position.getChildren());
返回v;
}
静态类视窗夹{
公共影像视图;
公共文本视图tvName;
公共文本视图描述;
公共文本视图tvDOB;
公共文本视图;
公共文本视图高度;
公共文本视图;
公共文本视图;
}
私有类DownloadImageTask扩展了AsyncTask{
图像视图bmImage;
公共下载ImageTask(ImageView bmImage){
this.bmImage=bmImage;
}
受保护位图doInBackground(字符串…URL){
字符串urldisplay=url[0];
位图mIcon=null;
试一试{
InputStream in=newjava.net.URL(urldisplay.openStream();
mIcon=BitmapFactory.decodeStream(in);
}捕获(例外e){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回mIcon;
}
受保护的void onPostExecute(位图结果){
bmImage.setImageBitmap(结果);
}
}
}

使用了Android通用图像加载程序这是最好的

申报

论创造

此处没有图像缓存中没有任何图像加载的可绘制图像


您也可以使用Piccaso和Glide

这是编辑后的代码,它工作起来很有魅力

    import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;

public class ActorAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    private List<Actors> movieItems;
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public ActorAdapter(Activity activity, List<Actors> movieItems) {
        this.activity = activity;
        this.movieItems = movieItems;
    }

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

    @Override
    public Object getItem(int location) {
        return movieItems.get(location);
    }

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

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

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.list_item, null);

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();
        NetworkImageView thumbNail = (NetworkImageView) convertView
                .findViewById(R.id.flag);
        TextView title = (TextView) convertView.findViewById(R.id.rank);

        // getting movie data for the row
        Actors m = movieItems.get(position);

        // thumbnail image
        thumbNail.setImageUrl(m.getImage(), imageLoader);

        // title
        title.setText(m.getName());


        return convertView;
    }

}
import java.util.List;
导入android.app.Activity;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.TextView;
导入com.android.volley.toolbox.ImageLoader;
导入com.android.volley.toolbox.NetworkImageView;
公共类Actorapter扩展了BaseAdapter{
私人活动;
私人充气机;
私人电影项目清单;
ImageLoader ImageLoader=AppController.getInstance().getImageLoader();
公共Actorapter(活动,列出电影项目){
这个。活动=活动;
this.movieItems=movieItems;
}
@凌驾
public int getCount(){
返回movieItems.size();
}
@凌驾
公共对象getItem(int位置){
返回电影项目。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
如果(充气器==null)
充气器=(充气器)活动
.getSystemService(上下文布局\充气机\服务);
if(convertView==null)
convertView=充气机。充气(R.layout.list_项,空);
如果(imageLoader==null)
imageLoader=AppController.getInstance().getImageLoader();
NetworkImageView缩略图=(NetworkImageView)convertView
.findviewbyd(R.id.flag);
TextView title=(TextView)convertView.findViewById(R.id.rank);
//正在获取行的电影数据
Actors m=movieItems.get(位置);
//缩略图像
缩略图.setImag
 imageLoader1 = ImageLoader.getInstance();

 imageLoader1.init(ImageLoaderConfiguration.createDefault(getActivity()));
   DisplayImageOptions
            options = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .cacheOnDisk(true)
            .showImageOnLoading(R.drawable.no_image) // resource or drawable
            .showImageForEmptyUri(R.drawable.no_image) // resource or drawable
            .showImageOnFail(R.drawable.no_image)
            .considerExifParams(true)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .build();

    imageLoader1.displayImage(yourpath.replace(" ", "%20"), ivprofile, options);
    import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;

public class ActorAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    private List<Actors> movieItems;
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public ActorAdapter(Activity activity, List<Actors> movieItems) {
        this.activity = activity;
        this.movieItems = movieItems;
    }

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

    @Override
    public Object getItem(int location) {
        return movieItems.get(location);
    }

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

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

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.list_item, null);

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();
        NetworkImageView thumbNail = (NetworkImageView) convertView
                .findViewById(R.id.flag);
        TextView title = (TextView) convertView.findViewById(R.id.rank);

        // getting movie data for the row
        Actors m = movieItems.get(position);

        // thumbnail image
        thumbNail.setImageUrl(m.getImage(), imageLoader);

        // title
        title.setText(m.getName());


        return convertView;
    }

}