您的位置:首页 > 理论基础 > 计算机网络

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

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;
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐