ImageLoder缓存图片及ListView多条目加载

这里的话XListView和ImageLoder的适配我就不发了,我写一些实际代码,要是需要的话有时间我会补发的
首先需要在清单文件里写一下访问权限
AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

< !--在application里添加继承Application类的类名-- > 
<application
...
android:name=".MyImageLoder"
...
/>

这里写的就是清单文件name属性的类名
ImageLoder类

public class MyImageLoder extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //这些都是可以通过个人需要写的,要是需要全的话,大家可以百度
        //缓存文件夹的路径
        File file = StorageUtils.getOwnCacheDirectory(this, Environment.getDownloadCacheDirectory().getPath());
        ImageLoaderConfiguration builder = new ImageLoaderConfiguration.Builder(this)
                .threadPoolSize(3)//线程池加载的数量
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024))//可以通过自己的内存缓存实现
                .diskCache(new UnlimitedDiskCache(file))//可以自己定义路径
                .diskCacheSize(50 * 1024 * 1024)//sd卡缓存的最大值
                .diskCacheFileCount(100)//可以缓存文件的数量
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())
                .build();//开始创建

        //设置缓存选项
        ImageLoader.getInstance().init(builder);
    }
}

写一个StreamTools 类用来获取到网络数据后,转换成字符串格式
装换类

public class StreamTools {
    public static String getString(InputStream inputStream){
        try {
            //定义一个空的数组用来装我们取到的数据,最大是1024
            byte[] bytes = new byte[1024];
            //定义一个数组下标
            int len=0;
            //通过ByteArrayOutputStream进行转换
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            //while循环一下 这里有个小知识点,如果数组下边是-1的话证明数组里已经没有数据了
            while ((len=inputStream.read(bytes))!=-1){
                //把我们while取到的数据写入ByteArrayOutputStream 
                byteArrayOutputStream.write(bytes,0,len);
            }
            //返回一下
            return byteArrayOutputStream.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  null;

    }
}

然后是要在MainActivity的代码

MainActivity

public class MainActivity extends AppCompatActivity {

    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //需要找到xml布局文件里面listview的id
        listView = (ListView) findViewById(R.id.listView);
        /**
        *自定义一个方法然后放入我们需要访问的路径文件路径
        *这里我用的是聚合的网站,你们可以根据自己的需求写入相关网址
        */
        getMessage("http://apis.juhe.cn/cook/query?key=302e47cc56497312cb48ae3b46af632f&menu=秘制红烧肉");
    }

    public void getMessage(String path){
        //这里的话我用的异步加载
        new AsyncTask<String,Void,String>(){
            @Override
            protected String doInBackground(String... params) {
                try {
                    //相当于获取网址
                    String param = params[0];
                     //相当于在浏览器地址栏中输入网络地址
                    URL url = new URL(param);
                     //相当于你输入完网址和ihou,敲回车动作
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                   //设置请求方式 get 一定要大写
                    urlConnection.setRequestMethod("GET");
                    urlConnection.setReadTimeout(5000);
                    urlConnection.setConnectTimeout(5000);

                    int code = urlConnection.getResponseCode();
                    //服务器响应  200 请求成功
                    if (code==200){
                        InputStream inputStream = urlConnection.getInputStream();
                        String s = StreamTools.getString(inputStream);
                        System.out.println("数据为:"+s);
                       return s;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }
           //需要重写onPostExecute方法,然后可以在里边写入我们想更改的主线程
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                //判断死否为空
                if (s==null){
                    return;
                }
                Gson gson = new Gson();
                Bean bean = gson.fromJson(s, Bean.class);
                List<Bean.ResultBean.DataBean.StepsBean> steps = bean.getResult().getData().get(0).getSteps();
                ListViewAdapter adapter = new ListViewAdapter(MainActivity.this,steps);
                listView.setAdapter(adapter);
        }
        }.execute(path);//把方法传到的路径放在这里

    }
}

适配器类

public class ListViewAdapter extends BaseAdapter {
    private Context context;
    private List<Bean.ResultBean.DataBean.StepsBean> list;
    private final int PAGE_ONE = 0;
    private final int PAGE_TWO = 1;
    private final DisplayImageOptions builder;

    public ListViewAdapter(Context context, List<Bean.ResultBean.DataBean.StepsBean> list) {
        this.context = context;
        this.list = list;

        builder = new DisplayImageOptions.Builder()
                .showImageOnFail(R.mipmap.ic_launcher)
                .showImageOnLoading(R.mipmap.ic_launcher)
                .cacheOnDisk(true)
                .cacheInMemory(true)
                .build();
    }

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

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

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

    @Override
    public int getViewTypeCount() {
        return 2;

    }

    @Override
    public int getItemViewType(int position) {
        if (position % 2 == 0) {
            return PAGE_ONE;
        } else {
            return PAGE_TWO;
        }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        int type = getItemViewType(position);
        switch (type) {
            case PAGE_ONE: {
                ViewHolderOne viewHolderOne = null;
                if (convertView == null) {
                    viewHolderOne = new ViewHolderOne();
                    convertView = View.inflate(context, R.layout.message_one, null);
                    viewHolderOne.textView = (TextView) convertView.findViewById(R.id.textView_one);
                    viewHolderOne.imageView = (ImageView) convertView.findViewById(R.id.imageView_one);
                    convertView.setTag(viewHolderOne);
                } else {
                    viewHolderOne = (ViewHolderOne) convertView.getTag();
                }
                viewHolderOne.textView.setText(list.get(position).getStep());
                ImageLoader.getInstance().displayImage(list.get(position).getImg(), viewHolderOne.imageView, builder);

            }
            break;
            case PAGE_TWO: {
                ViewHolderTwo viewHolderTwo = null;
                if (convertView == null) {
                    viewHolderTwo = new ViewHolderTwo();
                     convertView = View.inflate(context, R.layout.message_two, null);
                    viewHolderTwo.textView = (TextView) convertView.findViewById(R.id.textView_two);
                    viewHolderTwo.imageView = (ImageView) convertView.findViewById(R.id.imageView_two);
                    convertView.setTag(viewHolderTwo);
                } else {
                    viewHolderTwo = (ViewHolderTwo) convertView.getTag();
                }
                viewHolderTwo.textView.setText(list.get(position).getStep());
                ImageLoader.getInstance().displayImage(list.get(position).getImg(), viewHolderTwo.imageView, builder);
                break;
            }
        }
        return convertView;
    }

}

class ViewHolderOne {
    TextView textView;
    ImageView imageView;

}

class ViewHolderTwo {
    TextView textView;
    ImageView imageView;
}

Bean对象


public class Bean {


    private String resultcode;
    private String reason;
    private ResultBean result;
    private int error_code;

    public String getResultcode() {
        return resultcode;
    }

    public void setResultcode(String resultcode) {
        this.resultcode = resultcode;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    public ResultBean getResult() {
        return result;
    }

    public void setResult(ResultBean result) {
        this.result = result;
    }

    public int getError_code() {
        return error_code;
    }

    public void setError_code(int error_code) {
        this.error_code = error_code;
    }

    public static class ResultBean {

        private String totalNum;
        private String pn;
        private String rn;
        private List<DataBean> data;

        public String getTotalNum() {
            return totalNum;
        }

        public void setTotalNum(String totalNum) {
            this.totalNum = totalNum;
        }

        public String getPn() {
            return pn;
        }

        public void setPn(String pn) {
            this.pn = pn;
        }

        public String getRn() {
            return rn;
        }

        public void setRn(String rn) {
            this.rn = rn;
        }

        public List<DataBean> getData() {
            return data;
        }

        public void setData(List<DataBean> data) {
            this.data = data;
        }

        public static class DataBean {

            private String id;
            private String title;
            private String tags;
            private String imtro;
            private String ingredients;
            private String burden;
            private List<String> albums;
            private List<StepsBean> steps;

            public String getId() {
                return id;
            }

            public void setId(String id) {
                this.id = id;
            }

            public String getTitle() {
                return title;
            }

            public void setTitle(String title) {
                this.title = title;
            }

            public String getTags() {
                return tags;
            }

            public void setTags(String tags) {
                this.tags = tags;
            }

            public String getImtro() {
                return imtro;
            }

            public void setImtro(String imtro) {
                this.imtro = imtro;
            }

            public String getIngredients() {
                return ingredients;
            }

            public void setIngredients(String ingredients) {
                this.ingredients = ingredients;
            }

            public String getBurden() {
                return burden;
            }

            public void setBurden(String burden) {
                this.burden = burden;
            }

            public List<String> getAlbums() {
                return albums;
            }

            public void setAlbums(List<String> albums) {
                this.albums = albums;
            }

            public List<StepsBean> getSteps() {
                return steps;
            }

            public void setSteps(List<StepsBean> steps) {
                this.steps = steps;
            }

            public static class StepsBean {
                /**
                 * img : http://img.juhe.cn/cookbook/s/1/45_0824e37faf00b71e.jpg
                 * step : 1.将五花肉煮至断生状态
                 */

                private String img;
                private String step;

                public String getImg() {
                    return img;
                }

                public void setImg(String img) {
                    this.img = img;
                }

                public String getStep() {
                    return step;
                }

                public void setStep(String step) {
                    this.step = step;
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/peotry_favour/article/details/71103279