setOnScrollListener实现网络请求上下滑动加载数据
2015-11-26 14:09
651 查看
public class MainActivity extends Activity implements OnClickListener{
private ListView lv;
private MyAsynTask task;
private HttpURLConnection connection;
private ArrayList<Data_pinge>list=new ArrayList<Data_pinge>( );
private User u;
private boolean flg = true;//判断页面个数
private Myadapter myadapter;
private Button load;
private int pagecur=1;//定义网址页数变量
private BitmapUtils bitmapUtils;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView) findViewById(R.id.lv);
load=(Button) findViewById(R.id.button1);
//实现滑动效果家加载数据
lv.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
switch (scrollState) {
case SCROLL_STATE_FLING://快速滑动
break;
case SCROLL_STATE_IDLE://静止不动
//返回显示在屏幕上的最后一个元素在适配器中所处的位置。 返回值 在适配器数据集中 的位置。
if(lv.getLastVisiblePosition()==(list.size()-1)){
Toast.makeText(MainActivity.this,"正在加载数据" , 0).show();
gData();
}
break;
case SCROLL_STATE_TOUCH_SCROLL://手指点击屏幕
break;
default:
break;
}
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
});
Myadapter myadapter=new Myadapter();
lv.setAdapter(myadapter);
gData();
}
private void gData() {
// TODO Auto-generated method stub
task=new MyAsynTask();
try {
//得到通过网络请求等到的Json字符串
String str=task.execute("http://www.iginwa.com/mobile/index.php?act=pinge&page=5&curpage="+pagecur).get();
Gson gson=new Gson();
pagecur=pagecur+1;//数据增加一条就刷新
User u=gson.fromJson(str, User.class);
// list=u.getDatas().getPinge_list();
//System.out.println(ping_list.toString());
//如果请求的数据大于5条,把数据添加到集合里,刷新适配器
if(u.getDatas().getPinge_list().size()>=5){
list.addAll(u.getDatas().getPinge_list());
//myadapter.notifyDataSetChanged();//刷新数据
}else{
//如果请求的数据小于5条,添加到集合里,刷新适配器,给flg从新赋值,并且不进行添加数据
if(flg){
list.addAll(u.getDatas().getPinge_list());
myadapter.notifyDataSetChanged();
//flg=false;
}else{
Toast.makeText(MainActivity.this, "没有更多数据了...", 1000).show();
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class Myadapter extends BaseAdapter{
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHoder h=null;
if(convertView==null){
h=new ViewHoder();
convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.item, null);
h.tv1=(TextView) convertView.findViewById(R.id.textView1);
h.tv2=(TextView) convertView.findViewById(R.id.textView2);
h.image =(ImageView) convertView.findViewById(R.id.imageView1);
convertView.setTag(h);
}else{
h=(ViewHoder) convertView.getTag();
}
h.tv1.setText("标题:"+ list.get(position).getPinge_title());
h.tv2.setText("新闻"+list.get(position).getPinge_desc());
BitmapUtils bitmap=new BitmapUtils(MainActivity.this);
bitmap.display(h.image, list.get(position).getPinge_pic());
return convertView;
}
class ViewHoder{
TextView tv1,tv2;
ImageView image;
}
}
//控件加载
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
gData();
break;
}
}
}
异步任务网络请求:
package com.example.url;
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 android.os.AsyncTask;
import android.text.NoCopySpan.Concrete;
import android.util
4000
.Log;
public class MyAsynTask extends AsyncTask<String, Integer, String>{
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
StringBuffer buffer=null;
try {
URL url=new URL(params[0]);
//网络请求
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
connection.setConnectTimeout(10*1000);
if(connection.getResponseCode()==200){
//得到输入流
InputStream stream=connection.getInputStream();
//字节流转化成字符流,在缓冲区读取
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(stream));
String str="";
buffer=new StringBuffer();
while ((str=bufferedReader.readLine() )!=null) {
buffer.append(str);
Log.e("TAG", "返回数据"+str);
}
}else{
Log.e("TAG", "请求失败");
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return buffer.toString();
}
}
相关文章推荐
- iOS开源库解析之ASIHTTPRequest
- 《神经网络和深度学习》系列文章十六:反向传播算法代码
- 《神经网络和深度学习》系列文章十五:反向传播算法
- iOS开发网络篇—监测网络状态
- 用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC)
- kvm配置网络
- 【读书笔记】:哈工大软件学院计算机网络期末复习概要
- 未能从程序集“System.ServiceModel”中加载类型“System.ServiceModel.Activation.HttpModule”。
- 未能从程序集“System.ServiceModel”中加载类型“System.ServiceModel.Activation.HttpModule”。
- 浅谈单片机以太网接入方案
- [IIS] 不能加载类型System.ServiceModel.Activation.HttpModule
- WebService SOAP、Restful和HTTP(post/get)请求区别
- Android连接服务器请求架包之 Async-http-client
- 《读书笔记》系列2:TCP/IP详解
- Http通讯
- HttpClient调用第三方接口 底层代码的封装 方便以后使用
- ios 机型检测和网络检测
- 网络舆情分析技术 读书笔记2
- kali攻防第4章 内网称霸之HTTP信息截取
- C# 之httpwatch 缩减HttpWatch成可以进行二次开发的代码