//此实在Fragment中实现的,黄色部分为自动加载,红色部分是需要注意的和手动加载,    蓝色部分是睡眠时间,自我感觉不用写  ,还有就是手动加载时,不知道为什么进去后显示的就是最后一行,求大神指教

public class Fragment1 extends Fragment{
       
        //加载的第几页
        private int index = 0;
    
    
    private List<News> news=new ArrayList<News>();
    private ListView lv;
    private MyAdapter adapter;
   
    private String urlPath="http://www.93.gov.cn/93app/data.do?channelId=0&startNum=";
    
    //使用Handler刷新UI
    private Handler handler=new Handler(){
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case 0:
                //清空集合
              
                //刷新适配器
                adapter.notifyDataSetChanged();
                //获得消息数据
                String text=(String) msg.obj;
                //解析json串
                tojson(text);
                break;

default:
                break;
            }
        }

};
    //解析json串
    private void tojson(String text) {
        try {
            JSONObject obj=new JSONObject(text);
            JSONArray data=obj.getJSONArray("data");
            for (int i = 0; i < data.length(); i++) {
                JSONObject json=data.getJSONObject(i);
                String ID=json.getString("ID");
                String TITLE=json.getString("TITLE");
                String SUBTITLE=json.getString("SUBTITLE");
                String IMAGEURL=json.getString("IMAGEURL");
                String FROMNAME=json.getString("FROMNAME");
                String SHOWTIME=json.getString("SHOWTIME");
                String RN=json.getString("RN");
                //添加到集合中去
                News newss=new News(ID, TITLE, SUBTITLE, IMAGEURL, FROMNAME, SHOWTIME, RN);
                news.add(newss);
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
    };

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        //找到对应的布局文件
        View view=inflater.inflate(R.layout.frgment_item1, null);
        //找到Listview控件
        lv = (ListView) view.findViewById(R.id.lv);
        
        View v=LayoutInflater.from(getActivity()).inflate(R.layout.button_footer, null);
        lv.addFooterView(v);
        Button button=(Button) v.findViewById(R.id.bt_button);
        
        /*lv.setOnScrollListener(new OnScrollListener() {
            
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                if (scrollState==OnScrollListener.SCROLL_STATE_IDLE) {
                    if (view.getLastVisiblePosition()==news.size()-1) {
                        index=index++;
                        Toast.makeText(getActivity(), "加载中...", 0).show();
                        huodeshuju(index);
                    }
                }
                
                
                
            }
            
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                // TODO Auto-generated method stub
                
            }
        });*/
        //获得数据
        huodeshuju(index);
        button.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                index=index++;
                Toast.makeText(getActivity(), "加载中...", 0).show();
                huodeshuju(index);
            }
        });
        
        //返回view
        return view;
    }
    //获得数据
    private void huodeshuju(final int index) {
        //使用线程
        new Thread(){
            public void run() {
                try {
                    //使用HttpURLConnection获取网络数据
                    URL url=new URL(urlPath+index);
                    HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection();
                    urlConnection.setConnectTimeout(5000);
                    urlConnection.setReadTimeout(5000);
                    urlConnection.setRequestMethod("GET");
                    urlConnection.connect();
                    int code=urlConnection.getResponseCode();
                    if (code==200) {
                        InputStream inputStream=urlConnection.getInputStream();
                        BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
                        String line;
                        StringBuffer buffer=new StringBuffer();
                        while ((line=reader.readLine())!=null) {
                            buffer.append(line);
                            
                        }
                        String str=buffer.toString();
                        //创建一个消息
                        Message message=new Message();
                        message.what=0;
                        message.obj=str;
                        //给handler发送消息
                        handler.sendMessage(message);
                    }
                    
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
            };
        }.start();
        //有种加载的延时感

try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
                if (adapter == null) {
                    //设置Listview的适配器
                    adapter = new MyAdapter(news, getActivity());
                    lv.setAdapter(adapter);
                }else {
                    adapter.notifyDataSetChanged();
                }
        
    }

}

Android中获取网络数据时的分页加载的更多相关文章

  1. Android中监听webview监听是否加载完成

    之前写过一篇捕获Phoengap的webview事件的方法,主要是在实现了CordovaInterface的Activity中,  在onMessage中根据第一个参数的message name来判断 ...

  2. 在模型中获取网络数据,刷新tableView

    model .h #import <Foundation/Foundation.h> #import "AFHTTPRequestOperationManager.h" ...

  3. android UI进阶之实现listview的分页加载

    上篇博文和大家分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一 下子全部加载用户未读的微薄这将耗费比较长的时间,造成 ...

  4. Android 中的 WebView实现 Html5 标签网页加载

    自Android 4.4起,Android中的WebView开始基于Chromium(谷歌浏览器)支持浏览器的一系列功能,webkit解析网页各个节点,这个改变,使得WebView的性能大幅度提升,并 ...

  5. android中的LaunchMode详解----四种加载模式

    Activity有四种加载模式: standard singleTop singleTask singleInstance 配置加载模式的位置在AndroidManifest.xml文件中activi ...

  6. Android为TV端助力 转载:RecyclerView分页加载

    package com.android.ryane.pulltoloaddata_recyclerview; import android.os.Handler;import android.os.L ...

  7. jquery加载数据时显示loading加载动画特效

    插件下载:http://www.htmleaf.com/jQuery/Layout-Interface/201505061788.html 插件使用: 使用该loading加载插件首先要引入jQuer ...

  8. android 中获取网络状态、判断3G、2G、wifi网络、判断wifi是否打开、获取本机地址、获取本机串号IMEI整理

    代码如下:package com.android.xym; import java.io.IOException; import java.net.HttpURLConnection; import ...

  9. Http方式获取网络数据

    通过以下代码可以根据网址获取网页的html数据,安卓中获取网络数据的时候会用到,而且会用Java中的sax方式解析获取到数据.(sax解析主要是解析xml)具体代码如下: package com.wy ...

随机推荐

  1. gdb常用调试命令

    一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式)   ...

  2. JVM基础02-class文件

    一.class文件结构 介绍之前,请下载一个Bytecode工具,例如byte code viewer或者Java Bytecode Editor,我用的是后者Java Bytecode Editor ...

  3. 对于Netty的十一个疑问

    [说明]本文原载于码农 IO(manong.io)官方微信 developerWorks,转载.引用请注明出处及作者. 1.Netty 是什么? Netty 是一个基于 JAVA NIO 类库的异步通 ...

  4. LeetCode OJ 152. Maximum Product Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  5. 多线程---其他方法 停止线程、守护线程、join方法

    第三方停止线程: 原来是stop(),因为该方法有些问题,所以被interrupt()方法取代,它的用途跟机制是 当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结进行清除,强制让线程恢复到 ...

  6. ios系统下的QQ浏览器jquert的BUG

    $(document).bind("click", function(e){ var $t = $(e.target); alert(333); if($t.is("p& ...

  7. #define const extern

    将父类中的常量放到. m文件,子类就不会重复包含了.之后再.h文件中用extern NSSting * const ILScoreShowStartTime;// extern 用来声明变量和函数.c ...

  8. sync命令

    sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息. 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率.sync命令则 ...

  9. nginx启动,重启,关闭

    1.nginx启动: a.     /usr/path/sbin/nginx -c [/etc/path/nginx.conf] 中括号中为指定加载的配置文件,不指定则加载默认配置文件 b.     ...

  10. DirectShow音频采集声音不连续问题分析与解决办法经验总结

    最近广州大雨不断,并且多数无前兆,突然就来场大雨,给同学们降降温,说来本也是好事,但有时候下的真不是时候,最近这段时间都是即将下班了,大雨就来了,昨晚快下班前又出现了大雨,北方人总爱忘带雨伞,这不就被 ...