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

Android之xListView网络请求上拉下拉加载

2017-04-21 19:38 260 查看
添加网络请求权限

导入一个依赖库 需要升级到自己当前Studio的版本

如何将类依赖到依赖库步骤:Project Struture–>在左边选中当前的工程–>点击Dependencies–>右上角红的的加号,选择Module dependency–>点击xListView(名称自定义)这个依赖库–>点击OK,完成。

一、主方法

public class MainActivity extends AppCompatActivity {

private XListView xlistV;
private int page = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xlistV = (XListView) findViewById(R.id.xlistV);
//设置是否可以下拉刷新
// xlistV.setPullRefreshEnable(true);
//是否可以上拉更多
xlistV.setPullLoadEnable(true);
//刷新时间
xlistV.setRefreshTime("9:10:02");
initClint();

try {
onCooks("http://apis.juhe.cn/cook/query?key=302e47cc56497312cb48ae3b46af632f&menu="
+ URLEncoder.encode("秘制红烧肉", "utf-8") + "&pn=" + page + "&rn=" + 10);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

}

//监听
private void initClint() {
xlistV.setXListViewListener(new XListView.IXListViewListener() {
//下拉刷新更多
@Override
public void onRefresh() {
//请求第二页的数据,  把最新的数据加载在前面
++page;
try {
onCooks("http://apis.juhe.cn/cook/query?key=302e47cc56497312cb48ae3b46af632f&menu="
+ URLEncoder.encode("秘制红烧肉", "utf-8") + "&pn=" + page + "&rn=" + 10);
//停止刷新
xlistV.stopRefresh(true);
System.out.println("下拉啦");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}

//上拉加载更多
@Override
public void onLoadMore() {
++page;
try {
onCooks("http://apis.juhe.cn/cook/query?key=302e47cc56497312cb48ae3b46af632f&menu="
+ URLEncoder.encode("秘制红烧肉", "utf-8") + "&pn=" + page + "&rn=" +10);
xlistV.stopLoadMore();
System.out.println("上拉啦");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
});
}

public void onCooks(String path) {
//异步操作
new AsyncTask<String, Void, String>() {

private MyBaseAdapter adapter;
private Bean bean;

//UI更新
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (s == null) {
return;
}

//添加适配器
if (adapter == null){
//如果是第一次进就为空
adapter = new MyBaseAdapter(MainActivity.this, bean.getResult().getData());
}else{
//加载更多
adapter.addMore(bean.getResult().getData());
adapter.notifyDataSetChanged();
}
xlistV.setAdapter(adapter);
}
//网络请求
@Override
protected String doInBackground(String... params) {
String path = params[0];
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);

int code = connection.getResponseCode();
if (code == 200) {
InputStream input = connection.getInputStream();
String json = MyUtils.onStrem(input);
//转换成对象
Gson gson = new Gson();
bean = gson.fromJson(json, Bean.class);

}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}.execute(path);
}
}

//二、Utils类  流的转换
//流的转换
public class MyUtils {
public static String onStrem (InputStream input){
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] by = new byte[1024];
int len = 0;
while ((len = input.read(by)) != -1){
out.write(by,0,len);
}
return out.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}

//三、Bean类   添加属性实现get  set方法

四、BaseAdapter类    实现适配器
public class MyBaseAdapter extends BaseAdapter {
private Context context;
private List<Bean.ResultBean.DataBean> list;
private viewHolder holder;
private TextView ontv;

public MyBaseAdapter (Context context, List<Bean.ResultBean.DataBean> list){
this.context = context;
this.list = list;
}
//加载更多数据
public void addMore(List<Bean.ResultBean.DataBean> lists){
//foreach循环
for (Bean.ResultBean.DataBean data: lists) {
//将最新的数据添加到适配器定义的集合中
list.add(0,data);
}
}

@Override
public int getCount() {
return list != null ? list.size() : 0;
}

@Override
public Object getItem(int position) {
return list.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null){
convertView = View.inflate(context, R.layout.list_load,null);
holder = new viewHolder();
holder.ontv = (TextView) convertView.findViewById(R.id.ontv);
convertView.setTag(holder);
}else{
holder = (viewHolder) convertView.getTag();
}
//重写信息
holder.ontv.setText(list.get(position).getTags());
return convertView;
}
class viewHolder {
private TextView ontv;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: