1.布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.handmark.pulltorefresh.library.PullToRefreshGridView
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="2"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/gmage"
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/gtext"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="s"/>
</LinearLayout>
2.主页面
package com.bw.ymy.zonghe1.Fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.Toast;
import com.bw.ymy.zonghe1.Adapter.move1Adapter;
import com.bw.ymy.zonghe1.Adapter.movie2Adapter;
import com.bw.ymy.zonghe1.Bean.Tupian;
import com.bw.ymy.zonghe1.Bean.User;
import com.bw.ymy.zonghe1.R;
import com.bw.ymy.zonghe1.nutil.BannerUti;
import com.bw.ymy.zonghe1.nutil.UserNitul;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshGridView;
public class re extends Fragment {
private PullToRefreshGridView grid;
private movie2Adapter adapter;
private int page=1;
private String url = "http://api.tianapi.com/meinv/?key=605fa0a929c8d8b116424df0510c6b2a&num=10";
private final int LOAD_NUM = 10;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.novie2,container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//获取pill
grid=view.findViewById(R.id.grid);
adapter=new movie2Adapter(getActivity());
grid.setAdapter(adapter);
//支持刷新 加载
grid.setMode(PullToRefreshBase.Mode.BOTH);
grid.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<GridView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<GridView> refreshView) {
page=1;
insum();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) {
insum();
}
});
}
private void insum()
{
BannerUti.yibu(url,Tupian.class,new BannerUti.Callback<Tupian>(){
@Override
public void getdata(Tupian tupian) {
if(page == 1){
adapter.setmData(tupian.getNewslist());
}else{
adapter.addmData(tupian.getNewslist());
}
page++;
grid.onRefreshComplete();
if(tupian.getNewslist().size()<LOAD_NUM){
grid.setMode(PullToRefreshBase.Mode.PULL_FROM_START);
}
}
});
}
}
3.Adapter
package com.bw.ymy.zonghe1.Adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bw.ymy.zonghe1.Bean.Bunner;
import com.bw.ymy.zonghe1.Bean.Tupian;
import com.bw.ymy.zonghe1.R;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
import java.util.List;
public class movie2Adapter extends BaseAdapter {
private List<Tupian.NewslistBean> mdata;
private Context context;
public movie2Adapter( Context context) {
mdata = new ArrayList<>();
this.context = context;
}
//刷新
public void setmData(List<Tupian.NewslistBean> datas){
mdata.clear();
if(datas!=null){
mdata.addAll(datas);
}
notifyDataSetChanged();
}
//加载
public void addmData(List<Tupian.NewslistBean> datas){
if(datas!=null){
mdata.addAll(datas);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return mdata.size();
}
@Override
public Tupian.NewslistBean getItem(int position) {
return mdata.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.movie2_item,parent,false);
holder = new ViewHolder(convertView);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.bind(getItem(position));
return convertView;
}
//创建寄存器
class ViewHolder{
ImageView image;
TextView text;
public ViewHolder(View convertView) {
image = convertView.findViewById(R.id.gmage);
text=convertView.findViewById(R.id.gtext);
convertView.setTag(this);
}
public void bind(Tupian.NewslistBean item) {
ImageLoader.getInstance().displayImage(item.getPicUrl(),image);
text.setText(item.getTitle());
}
}
}
4.Bean类
package com.bw.ymy.zonghe1.Bean;
import java.util.List;
public class Tupian {
/**
* code : 200
* msg : success
* newslist : [{"ctime":"2016-03-06 14:11","title":"苏小曼绝色诱惑私房内内照","description":"美女图片","picUrl":"http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_29fe3cef22985ae07803bf456b8947dc15-760x500.jpg","url":"http://m.xxxiao.com/1111"},{"ctime":"2016-03-06 14:11","title":"尤物诗朵雅美乳私房照","description":"美女图片","picUrl":"http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_fe9bea92980bb30c7fb9cc3c33c992042-760x500.jpg","url":"http://m.xxxiao.com/321"},{"ctime":"2016-03-06 14:11","title":"火辣红妆爆乳车模张雅琦魅惑壁纸","description":"美女图片","picUrl":"http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_a8d2ec85eaf98407310b72eb73dda2474-760x500.jpg","url":"http://m.xxxiao.com/419"},{"ctime":"2016-03-06 14:11","title":"AISS爱丝沙滩女神","description":"美女图片","picUrl":"http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_0d5fa187dacfced0f2731489399d4343-760x500.jpg","url":"http://m.xxxiao.com/882"},{"ctime":"2016-03-06 14:11","title":"黛欣霓爆乳野辣写真","description":"美女图片","picUrl":"http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_952ef7f7e44e4bdaf7718d20c99d66ff4-760x500.jpg","url":"http://m.xxxiao.com/647"},{"ctime":"2016-03-06 14:11","title":"韩国\u201c逆天颜值\u201d萝莉美少女 Yurisa","description":"美女图片","picUrl":"http://m.xxxiao.com/wp-content/uploads/sites/3/2015/07/m.xxxiao.com_d425b67b2744d9f62be091b2bb3c9d93-760x500.jpg","url":"http://m.xxxiao.com/2200"},{"ctime":"2016-03-06 14:11","title":"黄衫妩媚睡美人","description":"美女图片","picUrl":"http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_6bb61e3b7bce0931da574d19d1d82c886-760x500.jpg","url":"http://m.xxxiao.com/359"},{"ctime":"2016-03-06 14:11","title":"巨乳杉原杏璃 Anri Sugihara 写真集 Gravure Idols & Misty B","description":"美女图片","picUrl":"http://m.xxxiao.com/wp-content/uploads/sites/3/2015/06/m.xxxiao.com_b4524af8c20484f4638795ea1515db29-760x500.jpg","url":"http://m.xxxiao.com/1588"},{"ctime":"2016-03-06 14:11","title":"90后小美女韩雨嘉俏皮可爱自拍照","description":"美女图片","picUrl":"http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_78ac9968c75ef26f80a61b45cdf90661-760x500.jpg","url":"http://m.xxxiao.com/533"},{"ctime":"2016-03-06 14:11","title":"香车萝莉小狂野","description":"美女图片","picUrl":"http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_5d7b9adcbe1c629ec722529dd12e51292-700x500.jpg","url":"http://m.xxxiao.com/138"}]
*/
private int code;
private String msg;
private List<NewslistBean> newslist;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public List<NewslistBean> getNewslist() {
return newslist;
}
public void setNewslist(List<NewslistBean> newslist) {
this.newslist = newslist;
}
public static class NewslistBean {
/**
* ctime : 2016-03-06 14:11
* title : 苏小曼绝色诱惑私房内内照
* description : 美女图片
* picUrl : http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_29fe3cef22985ae07803bf456b8947dc15-760x500.jpg
* url : http://m.xxxiao.com/1111
*/
private String ctime;
private String title;
private String description;
private String picUrl;
private String url;
public String getCtime() {
return ctime;
}
public void setCtime(String ctime) {
this.ctime = ctime;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPicUrl() {
return picUrl;
}
public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
}
6.工具类
package com.bw.ymy.zonghe1.nutil;
import android.os.AsyncTask;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class BannerUti {
//接口
public interface Callback<T>
{
void getdata(T t);
}
public static void yibu(String lujing,final Class clazz,final Callback callback)
{
new AsyncTask<String,Void,Object>()
{
@Override
protected Object doInBackground(String... strings) {
return BannerUti.jiexi(strings[0],clazz);
}
@Override
protected void onPostExecute(Object o) {
callback.getdata(o);
}
}.execute(lujing);
}
//网络解析
public static <T> T jiexi(String lujing,Class clazz)
{
T t=(T) new Gson().fromJson(BannerUti.geturl(lujing),clazz);
return t;
}
public static String geturl(String lujing)
{
String result="";
try {
URL url=new URL(lujing);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
//读取超时
urlConnection.setReadTimeout(5000);
//连接超时
urlConnection.setConnectTimeout(5000);
if (urlConnection.getResponseCode()==200){
result = BannerUti.zifu(urlConnection.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
//字节流转换为字符流
private static String zifu(InputStream inputStream) throws IOException {
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
BufferedReader buff=new BufferedReader(inputStreamReader);
StringBuilder builder=new StringBuilder();
for (String imp=buff.readLine();imp!=null;imp=buff.readLine()){
builder.append(imp);
}
return builder.toString();
}
}