关于http网络请求Imageloder图片SharedPreferences封装Banner无限轮播

来源:互联网 发布:pta编程答案 编辑:程序博客网 时间:2024/06/04 19:23

关于网络请求,这一方面也是经常用,可是对于初学者就很头疼,所以我就把我封装的几个Util类给奉献出来吧

首先是HttpURLConnection:

public class HttpUtils {    //get请求获取网络数据    public static String getData(String utl) {            try {                URL url = new URL(utl);                System.out.println("iiiii"+utl);                HttpURLConnection connection = (HttpURLConnection) url.openConnection();                connection.setConnectTimeout(1024 * 8);                connection.setReadTimeout(1024 * 8);                connection.setRequestMethod("GET");                int responseCode = connection.getResponseCode();                if (responseCode == 200) {                    InputStream inputStream = connection.getInputStream();                    int len = 0;                    byte[] buf = new byte[1024 * 8];                    ByteArrayOutputStream baos = new ByteArrayOutputStream();                    while ((len = inputStream.read(buf)) != -1) {                        baos.write(buf, 0, len);                    }                    baos.close();                    System.out.println("iiiiiiiiiii"+baos.toString());                    return baos.toString();                } else {                    Log.e(TAG, "onCreate: Error" + responseCode);                }            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }            return null;        }}
然后是Imageloder:
public class ImageloderUtils {    public static void setImageView(String url, Context context, ImageView imageView) {            //初始化            ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).build();            //创建Imageloader 对象            ImageLoader imageLoader = ImageLoader.getInstance();            //设置初始化            imageLoader.init(config);            DisplayImageOptions options = new DisplayImageOptions.Builder()                    .showImageOnLoading(R.mipmap.ic_launcher) //设置图片在下载期间显示的图片                    .showImageForEmptyUri(R.mipmap.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片                    .showImageOnFail(R.mipmap.ic_launcher)  //设置图片加载/解码过程中错误时候显示的图片                    .cacheInMemory(true)//设置下载的图片是否缓存在内存中                    .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中                    .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示                    .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型                    .build();//构建完成            imageLoader.displayImage(url, imageView, options);        }}
如果需要用到无限轮播那就要用到一个bean类:还有一个依赖:
compile 'com.github.bumptech.glide:glide:3.7.0'
public class ImageLoaderBanner extends ImageLoader{    @Override        public void displayImage(Context context, Object path, ImageView imageView) {        Glide.with(context).load(path).into(imageView);    }}
再就是SharedPreferences我也封装了一下:
public class SharedPreferrenceHelper {    private static final String THEME = "theme";    public static void settheme(Context context, String theme){        SharedPreferences sp = context.getSharedPreferences("demo",Context.MODE_PRIVATE);        SharedPreferences.Editor editor = sp.edit();        editor.putString(THEME,theme);        editor.apply();    }    public static String gettheme(Context context){        SharedPreferences sp = context.getSharedPreferences("demo",Context.MODE_PRIVATE);        return sp.getString(THEME,"1");    }}
再然后我就用上面的东西做一个无限轮播:
private void getBanner(){    View view = View.inflate(getContext(),R.layout.header,null);    SharedPreferences prefs = getActivity().getSharedPreferences("user", Context.MODE_PRIVATE);    Banner banner = (Banner) view.findViewById(R.id.ban);    banner.setImageLoader(new ImageLoaderBanner());    final List<String> img=new ArrayList<>();    final DataBase.ResultBean.DataBean imgs = datas.get(0);    img.add(imgs.getThumbnail_pic_s03());    img.add(imgs.getThumbnail_pic_s02());    img.add(imgs.getThumbnail_pic_s());    banner.setImages(img);    banner.start();    xListView.addHeaderView(view);}
我这里是把Banner直接添加到XListView头部,布局我就不再多写,大家想必都懂
这些都是小崔做项目时封装的一些util还望大家多多点评
public class BlankFragment0 extends Fragment implements XListView.IXListViewListener{    private String utl = "http://v.juhe.cn/toutiao/index?type=toutiao&key=d4c18a18c3391f90dc971633f6e6f445";    private XListView xListView;    private List<DataBase.ResultBean.DataBean> datas;    private MyAdapter myAdapter;    Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            //刷新listView            myAdapter.notifyDataSetChanged();            //隐藏头和尾            closeXlistView();        }    };    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        datas = new ArrayList<DataBase.ResultBean.DataBean>();        View view = inflater.inflate(R.layout.fragment_blank_fragment0, container, false);        initView(view);       * new MyAsyncTask().execute(utl);        //设置XlistView的上拉加载,下拉刷新的接口        xListView.setXListViewListener(this);        xListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {            @Override            public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {                new AlertDialog.Builder(getContext())                        .setTitle("删除")                        .setMessage("确定要删除我吗?")                        .setPositiveButton("", new DialogInterface.OnClickListener() {                            public void onClick(DialogInterface dialog, int which)                            {                                datas.remove(position-2);                                myAdapter.notifyDataSetChanged();                                dialog.dismiss();                            }                        })                        .setNegativeButton("", null)                        .show();                return true;            }        });        return view;    }    @Override    public void onRefresh() {        handler.postDelayed(new Runnable() {            @Override            public void run() {                datas.add(0,datas.get(5));                handler.sendEmptyMessage(0);            }        },2000);    }    @Override    public void onLoadMore() {        handler.postDelayed(new Runnable() {            @Override            public void run() {                for(int x=0; x<5; x++){                    datas.add(datas.get(x+5));                }                handler.sendEmptyMessage(0);            }        },2000);    }    private void closeXlistView() {        //停止加载更多        xListView.stopLoadMore();        //停止刷新        xListView.stopRefresh();        //更新时间        xListView.setRefreshTime(dateFormat());    }    //自定义的AsyncTask重点地方    private class MyAsyncTask extends AsyncTask<String, Integer, String> {                //这个方法运行在主线程,doInBackground之前运行,我们一般做初始化                @Override                protected void onPreExecute() {                    super.onPreExecute();                }                //这个方法运行在子线程,我们可以做一个耗时操作                @Override                protected String doInBackground(String... strings) {                    ////////////////////////////////网络请求的操作,注意用return返回获取到的字符串,加网络权限////////////////////////////                    String data = HttpUtils.getData(strings[0]);                    Gson gson = new Gson();                    DataBase dataBase = gson.fromJson(data, DataBase.class);                    datas.addAll(dataBase.getResult().getData());                    return null;                }                //运行在主线程,这个方法在doInBackground执行之后执行.我们一般做从网络拿到数据,使用的数据的操作                @Override                protected void onPostExecute(String s) {                    ////////////////////拿到处理后的数据,更新UI///////////////////////////////            myAdapter = new MyAdapter(getContext(), datas);            getBanner();            //开启下拉刷新            xListView.setPullRefreshEnable(true);            //开启加载更多可用            xListView.setPullLoadEnable(true);            xListView.setAdapter(myAdapter);            xListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {                @Override                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                   // Toast.makeText(getContext(), datas.get(i).getUrl(), Toast.LENGTH_SHORT).show();                    Intent intent = new Intent(getActivity(), WebActivity.class);                    intent.putExtra("url", datas.get(i-2).getUrl());                    startActivity(intent);                }            });            super.onPostExecute(s);        }    }    private void initView(View view) {        xListView = (XListView) view.findViewById(R.id.xListView);    }    private void getBanner(){        View view = View.inflate(getContext(),R.layout.header,null);        SharedPreferences prefs = getActivity().getSharedPreferences("user", Context.MODE_PRIVATE);        Banner banner = (Banner) view.findViewById(R.id.ban);        banner.setImageLoader(new ImageLoaderBanner());        final List<String> img=new ArrayList<>();        final DataBase.ResultBean.DataBean imgs = datas.get(0);        img.add(imgs.getThumbnail_pic_s03());        img.add(imgs.getThumbnail_pic_s02());        img.add(imgs.getThumbnail_pic_s());        banner.setImages(img);        banner.start();        xListView.addHeaderView(view);    }    /**     * 格式化毫秒值     *     * @return     */    private String dateFormat() {        long currentTimeMillis = System.currentTimeMillis();        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");        String format = dateFormat.format(currentTimeMillis);        return format;    }}

这个是我有关于网络请求的一个类,可能有帮助,大家多多指点

原创粉丝点击