1、自定义异步Task

    /**
     * 异步获取实时数据
     */
    public class TimerDataTask extends AsyncTask<Void, Void, Boolean> {

        @Override
        protected Boolean doInBackground(Void... params) {
            String getUrl = mUrl + "/RealTimeData.ashx?type=data";
            URL loginUrl = null;
            InputStream in = null;
            HttpURLConnection conn = null;

            //初始化列表
            mDataList = new ArrayList<DataListItem>();
            try {
                loginUrl = new URL(getUrl);
                conn = (HttpURLConnection) loginUrl.openConnection();
                conn.setRequestProperty("Charset", "UTF-8");
                if (conn.getResponseCode() == 200) {
                    in = new BufferedInputStream(conn.getInputStream());
                    Scanner scanner = new Scanner(in).useDelimiter("\\A");
                    String result = scanner.hasNext() ? scanner.next() : "";
                    Log.e(mLogTimerData,result);
                }
                conn.disconnect();
            } catch (IOException ex){
                Log.e(getString(R.string.log_e_url_error), ex.toString());
            }catch (JSONException ex){
                Log.e(getString(R.string.log_e_json_error), ex.toString());
            }

            return true;
        }

        @Override
        protected void onPostExecute(final Boolean success) {
//            Message msg = new Message();
//            uiHandler.sendMessage(msg);
            if(getActivity() != null) {
                getActivity().runOnUiThread(uiRefreshThread);
            }
            mTask=null;
        }
        @Override
        protected void onCancelled() {
            mTask=null;
        }
    }

2、在主线程刷新ListView

    Runnable uiRefreshThread =new Runnable() {
        @Override
        public void run() {
            if(getActivity() != null) {
                //初始化Adapter
                mAdapter = new DataListAdapter(getActivity()
                        , R.layout.fragment_data_list_item, mDataList);
                // Set the adapter
                mListView.setAdapter(mAdapter);
                mSwipeLayout.setRefreshing(false);
                mListView.setEnabled(true);
            }
        }
    };
    Runnable uiThread = new Runnable(){
        @Override
        public void run(){
            mListView.setEnabled(false);
        }
    };

3、定时任务

    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            if(getActivity() !=null) {
                getActivity().runOnUiThread(uiThread);
                mTask = new TimerDataTask();
                mTask.execute((Void) null);
            }
        }
    };

每次刷新都是,重新new一个Adapter对象,使用notifyDataSetChanged(),会出现不定时BUG异常

Android --Fragment中异步HTTP请求的更多相关文章

  1. 【转】Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法

    重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码, 于是就会用到Surfa ...

  2. Android Fragment中调用getActivity为null的问题

       在使用fragment的时候经常会遇到getActivity()为null的情况.比如我在一个异步网路请求的回调中调用了getActivity()就会出现空指针问题.之前解决这个问题,通常都是直 ...

  3. Android Fragment中使用Intent组件拍照

    要在activity里面去接受,然后传递给fragment对象,fragment有很多回调调用不到 你的设备有摄像头吗? 为了确保市场上的大多数设备都能运行你的程序,必须在项目中做一些检测,保证使用的 ...

  4. android Fragment中使用Toolbar

    在Activity中可以直接使用 setSupportActionBar(toolbar); 就可以重写 onCreateOptionsMenu 和 onOptionsItemSelected 方法: ...

  5. 使用Fiddler抓取Android模拟器中的Android_APP请求

    对Fiddler的设置:在https://www.telerik.com/download/fiddler网站上下载Fiddler,输入内容后点击下面按钮进行下载: 下载成功后,打开Fiddler进行 ...

  6. Android——Fragment+Editext总结

    原文地址: android Fragment中没有onTouchEvent解决方法 Android--点击EditText的时候弹出软键盘,点击EditText之外空白处软键盘消失,android-- ...

  7. Android中的异步网络请求

    本篇文章我们来一起写一个最基本的Android异步网络请求框架,借此来了解下Android中网络请求的相关姿势.由于个人水平有限,文中难免存在疏忽和谬误,希望大家可以指出,谢谢大家:) 1. 同步网络 ...

  8. Android应用开发:LoaderManager在Activity/Fragment中的使用分析

    LoaderManager 外部接口initLoader:起始 public <D> Loader<D> initLoader(int id, Bundle args, Loa ...

  9. Android 在Fragment中执行onActivityResult不被调用的简单解决方法

    在Android开发中,我们经常会用到FragmentActivity下嵌套多个Fragment,但是在开发过程中会发现在嵌套的Fragment中使用onActivityResult回调方法没有被执行 ...

随机推荐

  1. jsp七大动作指令

    jsp 七大动作指令 1) jsp:include 指令 用于在请求处理阶段包含来自一个Servlet或jsp页面的响应.和编译指令中的include不同,include只能用于包含静态页面,而jsp ...

  2. 每天学点GDB 11

    为了跟踪glibc库中函数的执行,需要带有debug symbol的glibc, 如果是debian或者是基于debian的发行版本如ubuntu和linuxmint之类的,很简单执行如下指令安装即可 ...

  3. PHP 设计模式 笔记与总结(9)数据对象映射模式

    [数据对象映射模式] 是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作.例如在代码中 new 一个对象,使用数据对象映射模式就可以将对象的一些操作比如设置一些属性,就会自动保存到数 ...

  4. git 使用钩子直接推送到工作目录

    远端机器 $ mkdir /www/teacherapi  # 创建工作目录 $ cd /data/git $ git init teacherapi.git --bare --shared Init ...

  5. SharedPreferences封装类SPUtils

    import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.uti ...

  6. 数据库MySql阶段总结

    S1数据库中最重要的是查询,对于查询要有一个好的理解模型是很关键的: 1. 每一个查询都会返回一个结果集,这个结果集可能是一个值,一个字段或者一个记录,甚至可能是一个表 返回一个值 SELECT * ...

  7. what a fuck postgre update sql

    ================= what a fuck postgre update sql ================= UPDATE temp_group_temp set group_ ...

  8. 删除本地git版本库中受版本控制的文件

     git乱码解决方案汇总 乱码原因 搜索一番,发现git文件名.log乱码,是普遍问题,这其中有编码的原因,也有跨平台的原因.主要原因是Windows 系统中的Git对中文文件名采用不同的编码保存所致 ...

  9. VS2015 多项目源码共享链接

    Eclipse有这个功能,在一个项目中加入另一个项目文件夹的引用,源码包含过来,这样不必copy一份代码,只需要维护一份源代码.一直想在VS中找到这个功能,目前项目需要,终于google到了. htt ...

  10. JavaScript操作数组

    数组被描述为一个存储元素的线性集合,元素可以通过索引来任意存取. 几乎所有的编程语言都有类似的数据结构,但是Javascript中的数组却略有不同. Javascript中的数组是一种特殊的对象,所以 ...