一个从网络获取数据的封装类,以及接口回调
来源:互联网 发布:命令者模式 java 编辑:程序博客网 时间:2024/06/05 20:34
package com.example.month_test;import android.os.AsyncTask;import android.util.Log;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * Created by Administrator on 2017/11/16 0016. */创建一个类继承AsyncTask<String ,Void,String>
public class MyAsct extends AsyncTask<String ,Void,String> { private URL url; private HttpURLConnection urlConnection;
给接口一个对象进行有参
private Jiekou jiekou; private String s; public MyAsct(Jiekou jiekou) { this.jiekou = jiekou; }调用AsyncTask<String ,Void,String>中的doInBackground(String... strings)@Override protected String doInBackground(String... strings) { try { url = new URL(strings[0]); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.setConnectTimeout(10000); urlConnection.setReadTimeout(10000); if (urlConnection.getResponseCode()==200) { InputStream inputStream = urlConnection.getInputStream(); ByteArrayOutputStream bos=new ByteArrayOutputStream(); int len=0; byte [] buffer=new byte[1024]; while ((len=inputStream.read(buffer))!=-1) { bos.write(buffer,0,len); } bos.close();; inputStream.close(); s = bos.toString(); Log.d("zzz", s); return s; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s);调用接口中的方法 jiekou.fangfa(s); }}
创建一个接口public interface Jiekou { void fangfa(String str);}在主页面实例化封装类然后传到适配器里面m = new MyAsct(new Jiekou() { @Override public void fangfa(String str) { Gson gson=new Gson(); Jie jie = gson.fromJson(str, Jie.class); if (operType==1) { data.clear(); } data.addAll(jie.getDataScroll()); setMyAdapter();
//传到适配器
之后对对ImageLoader进行初使化
创建一个类继承Application然后进行初始化调用一下方法@Overridepublic void onCreate() { super.onCreate(); //进行初使化 ImageUtils.initImageLoader(this);}就行了public class ImageUtils { /** * 对ImageLoader进行初使化 * @param context */ public static void initImageLoader(Context context){ File cacheFile=context.getExternalCacheDir();//android认为的缓存目录 ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(context) .memoryCacheExtraOptions(480, 800)//缓存图片最大的长和宽 .threadPoolSize(2)//线程池的数量 .threadPriority(4) .memoryCacheSize(2*1024*1024)//设置内存缓存区大小 .diskCacheSize(20*1024*1024)//设置sd卡缓存区大小 .diskCache(new UnlimitedDiscCache(cacheFile))//自定义缓存目录 .writeDebugLogs()//打印日志内容 .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理 .build(); ImageLoader.getInstance().init(configuration); } /** * 得到图片的显示设置类 * @return */ public static DisplayImageOptions getImageOptions(){ DisplayImageOptions options=new DisplayImageOptions.Builder() .cacheInMemory(true)//使用内存缓存 .cacheOnDisk(true)//使用磁盘缓存 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的色彩模式 .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放方式 .build(); return options; }之后就是适配器的问题了,在做适配器的时候
给图片的初始值;当有图片的时候为1,没有图片的时候为0private int NO_IMAGE=0;private int HAS_IMAGE=1;提供的有两个方法这个是种类的数目@Overridepublic int getViewTypeCount() { return 2;}//根据条目的下标,得到此条目到底应该是显示哪种类型视图,返回的是int这个是获取请求的图片进行判断,如果为空就没图片,否则就有图片 @Overridepublic int getItemViewType(int position) { String imageurl = dataScroll.get(position).getIMAGEURL(); if (imageurl==null) { return NO_IMAGE; }else { return HAS_IMAGE; }然后就是试图里面的操作int type = getItemViewType(i); if (type==HAS_IMAGE) { Log.d("zzz","if"); ViewHolderImage holderImage; if (view == null) { holderImage = new ViewHolderImage(); view = View.inflate(ctx, R.layout.image_view, null); holderImage.tvTitle = (TextView) view.findViewById(R.id.img_textview); holderImage.img = (ImageView) view.findViewById(R.id.img_imageview); view.setTag(holderImage); } else { holderImage = (ViewHolderImage) view.getTag(); } //显示数据 holderImage.tvTitle.setText(dataScroll.get(i).getTITLE()); ImageLoader.getInstance().displayImage("http://www.93.gov.cn/"+dataScroll.get(i).getIMAGEURL(), holderImage.img, ImageUtils.getImageOptions());// Log.d("zzz",data.get(i).getTITLE()+"--"+data.get(i).getIMAGEURL()); return view; }else { Log.d("zzz","else"); ViewHolderTitle holderTitle; if (view == null) { holderTitle = new ViewHolderTitle(); view = View.inflate(ctx, R.layout.tv_view, null); holderTitle.tvTitle = (TextView) view.findViewById(R.id.tv_textview); view.setTag(holderTitle); } else { holderTitle = (ViewHolderTitle) view.getTag(); } holderTitle.tvTitle.setText(dataScroll.get(i).getTITLE()); return view; } } class ViewHolderTitle { TextView tvTitle; } class ViewHolderImage { ImageView img; TextView tvTitle; }
阅读全文
0 0
- 一个从网络获取数据的封装类,以及接口回调
- 封装传值的接口与获取网络数据
- 网络连接的判断与封装以及网络获取数据的封装
- 网络数据获取的封装
- 获取网络数据的封装
- 从网络接口获取json数据不完全
- 从mysql获取数据方法的封装
- 封装好的一个数据接口
- 从网络获取数据
- 一个iOS项目总结(一):网络接口的封装
- 网络连接的判断的封装与 网络获取数据 的封装
- 接口 xml json 数据的封装类
- android 开发如何将数据封装成对象以及从对象中获取出来
- 封装的一个网络判断的类
- 练习:从网络中获取图片以及多线程的使用
- Android从网络获取北京时间以及动态的监听时间
- 从网络上获取数据
- iOS 从网络获取数据
- POJ3069---Saruman's Army()
- String、StringBuffer与StringBuilder的区别
- pullTofresh+AsynTask
- spring线程池ThreadPoolExecutor配置并且得到任务执行的结果
- rpm包的安装,查询,卸载,升级,校验,数据库重建,验证数据包
- 一个从网络获取数据的封装类,以及接口回调
- springboot + thymeleaf + mybatis + ueditor
- iOS 之UIAlertController的使用方法
- RocketMQ 快速入门
- pycharm 使用心得(一)安装和首次使用
- 关于Java代码优化的一些总结
- 没有学位和工作经验要怎么找到UX设计的工作
- linux中platform总线解析(二)(platform设备的注册)
- Glide RecyclerView插件