一个从网络获取数据的封装类,以及接口回调

来源:互联网 发布:命令者模式 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,没有图片的时候为0
private  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;    }

 
原创粉丝点击