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

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

2017-08-24 09:44 351 查看
关于网络请求,这一方面也是经常用,可是对于初学者就很头疼,所以我就把我封装的几个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;
}
}


这个是我有关于网络请求的一个类,可能有帮助,大家多多指点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐