Android中获取网络数据时的分页加载

//此实在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();
                }
        
    }

}

时间: 2024-09-17 23:58:04

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

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

 分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一下子全部加载用户未读的微薄这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了.通过分页分次加载数据,用户看多少就去加载多少. 通常这也分为两种方式,一种是设置一个按钮,用户点击即加载.另一种是当用户滑动到底部时自动加载.今天我就和大家分享一下这个功能的实现. 首先,

Android中apk加固完善篇之内存加载dex方案实现原理(不落地方式加载)

一.前言 时隔半年,困扰的问题始终是需要解决的,之前也算是没时间弄,今天因为有人在此提起这个问题,那么就不能不解决了,这里写一篇文章记录一下吧.那么是什么问题呢? 就是关于之前的一个话题:Android中apk加固技术实现 关于这个问题,之前的一篇文章已经说过了,没有了解的同学可以点击这里:Android中apk加固技术实现 请务必仔细的看完这篇文章,不然今天说的内容会感觉很蛋疼的,因为今天的文章就是为了解决当初的加固技术遗留的问题,这里先大致来说一下加固apk的原理吧,先来看一张图: 看到这张

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

之前写过一篇捕获Phoengap的webview事件的方法,主要是在实现了CordovaInterface的Activity中,  在onMessage中根据第一个参数的message name来判断webview的加载事件.不过如果是在Fragment中,一个Activity加载了多个包含了WebView的fragment的话,就无法在onMessage中判断到底是哪个WebView的加载事件. 经过尝试,发现,还是可以使用setWebViewClient的方式来,来重写WebViewClie

Android开发之ListView利用OnScrollListener实现分页加载数据

上篇博文和大家分享了下拉刷新,这是一个用户体验非常好的操作方式.新浪微薄就是使用这种方式的典型. 还有个问题,当用户从网络上读取微薄的时候,如果一下子全部加载用户未读的微薄这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了.通过分页分次加载数据,用户看多少就去加载多少. 通常这也分为两种方式,一种是设置一个按钮,用户点击即加载.另一种是当用户滑动到底部时自动加载.今天我就和大家分享一下这个功能的实现.

ListView实现分页加载(一)制作Demo

一.什么是分页加载 在下面的文章中,我们来讲解LitView分页加载的实现.什么是分页加载呢?我们先看几张效果图吧,如下:                                               效果说明:我们向上滑动ListView的时候,当滑动的最底部, 便会出现正在加载的进度条,当加载完成后,会出现加载后的数据.如此反复,这其实就是ListView的分页加载功能.像这样的工能,实在是太常见了.那么它是怎么实现的呢? 实现原理很简单,本质上,其实就是一个自定义的ListV

Android自定义控件(四)仿网易客户端上拉加载更多

上一篇仿得网页客户端的抽屉模式,这一篇继续,来写一写加载更多这个功能,通过自定义实现加载更多,先上图: 今天实现的就是如图中最下面的20条载入中...这个功能啦! 先来说一下思路: 1.在listview中加入20条载入中的这个布局并隐藏 2.加入OnScrollListener监听,通过监听滚动事件,当滚动到最低端的时候,显示上面的布局 3.通过接口回调实现加载更多的功能 4.加载完数据时,通知listview加载结束,隐藏上面的布局文件 下面直接上代码: 1.在listview中加入20条载

android—获取网络数据

取网络数据主要靠发交易(或者说请求,接口等),而这些交易由java中的网络通信,HttpURLConnection和HttpClient实现,以下是具体例子. 大家都知道,网络通信,发送请求有两种方式,GET和POST,这里也不例外. 1.HttpURLConnection的GET方式获取网络数据,get方式将参数放在url后一起传递过去,而且会被看到,一般不太安全,但是get方式只获取数据,不会更新数据. 步骤: (1).建立URL,URL url=new URL(urltmp); //url

Android中判断网络连接是否可用及监控网络状态

Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android中判断网络连接是否可用及监控网络状态,感兴趣的朋友可以参考下 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"

Android编程 获取网络连接状态 及调用网络配置界面

获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityManager 类,用于网络连接状态的检测. Android开发文档这样描述ConnectivityManager的作用: Class that answers queries about the state of network connectivity. It also notifies applic