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

来源:互联网 发布:ui设计 笔记本 知乎 编辑:程序博客网 时间:2024/05/29 09:13

这里的话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;                }            }        }    }}
0 0
原创粉丝点击