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

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

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息