setOnScrollListener实现网络请求上下滑动加载数据

 


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.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();
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值