一个从网络获取数据的封装类,以及接口回调
2017-11-17 16:01
447 查看
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然后进行初始化 调用一下方法
@Override public void onCreate() { super.onCreate(); //进行初使化 Ima 4000 geUtils.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,没有图片的时候为0
private int NO_IMAGE=0; private int HAS_IMAGE=1; 提供的有两个方法 这个是种类的数目
@Override public int getViewTypeCount() { return 2; } //根据条目的下标,得到此条目到底应该是显示哪种类型视图,返回的是int 这个是获取请求的图片进行判断,如果为空就没图片,否则就有图片 @Override public 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; }
相关文章推荐
- 通用JS工具类封装——网络数据请求功能、获取服务端接口 url、参数功能
- 网络连接的判断与封装以及网络获取数据的封装
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
- Struts2框架自学之路——Action获取表单数据的方式以及表单数据的封装
- Fragment 的静态方式和动态方式以及动态方式中fragment之间通过activity传递 数据(接口回调 ):
- ios中使用block回调或代理方式请求网络接口数据(包括网络缓存)
- 获取网络数据的封装
- 网络数据获取的封装
- 同步异步网络请求封装以及数据JSON解析
- 自己动手写一个 iOS 网络请求库(NSURLSession 初探、封装接口、降低耦合、快速文件上传 )
- 自己动手写一个 iOS 网络请求库(二)——封装接口
- html中通过js获取接口JSON格式数据解析以及跨域问题
- 自己动手写一个 iOS 网络请求库——封装接口
- 迭代网络数据头信息 以及获取客户端真实IP
- Activity间的切换实现和数据传递以及上一个Activity返回结果的获取和处理
- 记一个viewpager,用到网络取数据,回调,设置滑动
- 从网络接口获取json数据不完全
- 封装传值的接口与获取网络数据
- block传值以及利用block封装一个网络请求类
- Golang 如何定义一个接口类型的切片,它可以用来存储混合类型的数据,又如何自定义错误信息输出,以及如何定义变参函数,还有字符串多种拼接方式