精华内容
下载资源
问答
  • 安卓单页面多种状态切换(使用了Fragment技术,包含正常页面网络访问失败页面网络访问成功页面) 首先来看下效果图: 主要分为正常页面网络访问失败页面网络访问成功页面。 在这里我们可以在NormalFragment...

    安卓单页面多种状态切换(使用了Fragment技术,包含正常页面,网络访问失败页面和网络访问成功页面)

    首先来看下效果图:


    主要分为正常页面,网络访问失败页面和网络访问成功页面。

    在这里我们可以在NormalFragment进行网络访问操作。

    下面我们来一步步实现:

    首先抽取了BaseFragment类:

    public abstract class BaseFragment extends Fragment {
        //初始化View
        protected abstract View initView();
    
        //初始化数据
        protected abstract void initData();
    
        protected Activity mActivity;
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            mActivity = getActivity();
            View view = initView();
            return view;
        }
    
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            //更新布局
            initData();
        }
    }
    使用了抽象方法,子类必须实现initView来初始化页面,至于
    onCreateView

    转载请注明出处:http://blog.csdn.net/u010724819/article/details/53432899

    onActivityCreated

    方法,大家可以参照Fragment的生命周期。

    接下来写三个类,分别用来展示三种页面,同时需要继承BaseFragment


    具体的写法也很简单,我贴在下面了:

    NormalFragment() 

    public class NormalFragment extends BaseFragment {
        @Override
        protected View initView() {
            View view = View.inflate(getActivity(), R.layout.normal_main, null);
            Button btn_suc = (Button) view.findViewById(R.id.btn_start_success);
            btn_suc.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    initFragment(3);
                }
            });
            Button btn_fail = (Button) view.findViewById(R.id.btn_start_failed);
            btn_fail.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    initFragment(2);
                }
            });
            return view;
        }
    
        @Override
        protected void initData() {
    
        }
    }
    

    SuccessFragment (成功页面)
    public class SuccessFragment extends BaseFragment {
    
        @Override
        protected View initView() {
            View view = View.inflate(getActivity(), R.layout.success_layout, null);
            Button btn = (Button) view.findViewById(R.id.btn_retry);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    initFragment(1);
                }
            });
            return view;
        }
    
        @Override
        protected void initData() {
    
        }
    }
    FailedFragment(失败页面)
    public class FailedFragment extends BaseFragment {
    
        @Override
        protected View initView() {
            View view = View.inflate(getActivity(), R.layout.failed_layout, null);
            Button btn = (Button) view.findViewById(R.id.btn_retry);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    initFragment(1);
                }
            });
            return view;
        }
    
        @Override
        protected void initData() {
    
        }
    }

    MainActivity的关联方式:
    
    
      private void initFragment() {
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fm.beginTransaction();
            fragmentTransaction.replace(R.id.fl_layout, new NormalFragment(), "normal");
            fragmentTransaction.commit();
        }
    好的,这样就基本完成啦!

    下面来改造一下BaseFragment来切换不同的状态页面:
    这里贴出了完整的代码,核心代码是:initFragement(int flag);
    public abstract class BaseFragment extends Fragment {
        //初始化View
        protected abstract View initView();
    
        //初始化数据
        protected abstract void initData();
    
        protected Activity mActivity;
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            mActivity = getActivity();
            View view = initView();
            return view;
        }
    
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            //更新布局
            initData();
        }
    
        public void initFragment(int flag) {
            FragmentManager fm = getActivity().getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fm.beginTransaction();
            if (flag == 1) {
                fragmentTransaction.replace(R.id.fl_layout, new NormalFragment(), "normal");
            } else if (flag == 2) {
                fragmentTransaction.replace(R.id.fl_layout, new FailedFragment(), "failed");
            } else if (flag == 3) {
                fragmentTransaction.replace(R.id.fl_layout, new SuccessFragment(), "success");
            }
            fragmentTransaction.commit();
        }
    
    
    }

    好的,这样既可以实现相关的页面切换啦。
    
    
    大家有啥不清楚的可以参考我的源码,这里给出源码地址:https://github.com/yeluowuhen502/MultiStateTest点击打开链接
    
    
    看到这里,恭喜你,你是一个喜欢探索的人,这里分享一个非常好用的显示不同状态页的开源项目,可以直接集成到项目中哦:
    https://github.com/Kennyc1012/MultiStateView点击打开链接
    
    
    

    
    
    展开全文
  • // 页面开发 & 小程序开发 wx.getNetworkType({ success: res => { var networkType = res.networkType; // 返回网络类型2g,3g,4g,wifi } }) connection 通过JS判断网络状态调...

    微信开发

    微信中提供了很全面的api,除了小程序的api还有WeixinJSBridge

    // 页面开发 & 小程序开发
    wx.getNetworkType({
    	success: res => {
    		var networkType = res.networkType; // 返回网络类型2g,3g,4g,wifi
    	}
    })   
    

    connection

    通过JS判断网络状态调研及实例demo说明

    普通h5页面也是有api的,例如判断是否有网络 的时间onLine和onoffline(更多事件详情);还有就是navigator.connection获取网络状况 API,兼容性有问题,现在可以使用的浏览器不是太多。

    connectionInfo = navigator.connection
    /*
    Chrome:
    downlink: 10
    effectiveType: "4g"
    onchange: null
    rtt: 0
    saveData: false
    */
    

    在这里插入图片描述

    type

    bluetooth: 蓝牙
    cellular: 蜂窝网络(e.g., EDGE, HSPA, LTE, etc.)
    ethernet: 以太网
    none: 无连接
    mixed: 多类型混合
    other: 类型可知,但不可枚举
    unknown: 有链接,但类型未知
    wifi: Wi-Fi
    wimax: WiMAX
    

    effectiveType

    有效连接类型

    '2g'
    '3g'
    '4g'
    'slow-2'
    

    downlink

    有效带宽,M/s

    downlinkMax

    下行最大比特率

    rtt:

    往返时间(round-trip time):表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认,不包含数据传输时间)总共经历的时间。

    是不是有点失望

    参考链接:

    http://wicg.github.io/netinfo/
    https://developer.mozilla.org/zh-CN/docs/Web/API/Navigator/connection
    https://developer.mozilla.org/zh-CN/docs/Web/API/Network_Information_API
    https://juejin.im/entry/5b14aecfe51d4506c95eb1ea

    展开全文
  • Hybrid APP指的是半原生半Web的...在Hybrid 当中,如何快速的判断一APP页面是原生的还是H5页面呢? 1、看断网的情况 把手机的网络断掉。然后点开页面。然后可以正常显示的东西就是原生写的。 显示404或则错误页...

    Hybrid APP指的是半原生半Web的混合类App。需要下载安装,看上去类似Native App,但只有很少的UI Web View,访问的内容是 Web 。
    原生是Native APP,H5就是Web App

    在Hybrid 当中,如何快速的判断一个APP页面是原生的还是H5页面呢?
    1、看断网的情况
    把手机的网络断掉。然后点开页面。然后可以正常显示的东西就是原生写的。
    显示404或则错误页面的是html页面。

    2、看布局边界
    开发者选项->显示布局边界,页面元素很多的情况下布局是一整块的是h5的,布局密密麻麻的是原生控件。页面有布局的是原生的,否则为h5页面。(仅针对安卓手机试用)如下图所示:

    3、看复制文章的提示,需要你通过对比才能得出结果。
    比如是文章资讯页面可以长按页面试试,如果出现文字选择、粘贴功能的是H5页面,否则是native原生的页面。
    有些原生APP开放了复制粘贴功能或者关闭了。而H5的css屏蔽了复制选择功能等等情况。需要通过对目标测试APP进行对比才可知。
    这个在支付宝APP、蚂蚁聚宝都是可以判断的。

    4、看加载的方式
    如果在打开新页面导航栏下面有一条加载的线的话,这个页面就是H5页面,如果没有就是原生的。 微信里面打开我们的H5页面常见的有个绿色的 加载线条。如下图红框里面所示:

    5、看app顶部 导航栏是否会有关闭的操作
    如果APP顶部导航栏当中出现了关闭按钮或者有关闭的图标,那么当前的页面肯定的H5,原生的不会出现(除非设计开发者故意弄的)
    美团的、大众点评的APp、微信APP当加载h5过多的时候,左上角会出现关闭2字。

    6、判断页面 下拉刷新的时候(前提是要有下拉刷新的功能)
    如果界面没有明显刷新现象的是原生的,如果有明显刷新现象(比如闪一下)的是H5页面(ios和android)。
    比如淘宝的众筹页面。

    7、下拉页面的时候显示网址提供方的一定是H5

    来源:这里

    展开全文
  • 很多时候我们有这样一需求,需要在网络请求完了之后再去渲染页面,尤其是在一界面有多相关网络请求的时候需要处理。 这里不得不提到一系统的组件FutureBuilder,我们直接来看用法。 @override Widget ...

    很多时候我们有这样一个需求,需要在网络请求完了之后再去渲染页面,尤其是在一个界面有多个相关网络请求的时候需要处理。
    这里不得不提到一个系统的组件FutureBuilder,我们直接来看用法。

    单网络请求:

     @override
      Widget buildWidget(BuildContext context, Store<UserState> store) {
        // TODO: implement buildWidget
    
        return Scaffold(
          body: FutureBuilder(
              future: _futureBuilderFuture,
              builder: (BuildContext context, AsyncSnapshot snapShot) {
                print('connectionState:${snapShot.connectionState}');
                if (snapShot.connectionState == ConnectionState.waiting) {
                  return Text('Loading...');
                } else if (snapShot.connectionState == ConnectionState.done) {
                  print(snapShot.hasError);
                  print('data:${snapShot.data}');
                  if (snapShot.hasError) {
                    return Text('Error: ${snapShot.error}');
                  }
    
                  return ListView(
                  ...
    

    其中第一个参数 future对应的是一个具有Future返回值的方法,这个方法可以是一个网络请求,比如

     Future<CommonModel> fetchPost() async {
        final response = await http.get('http://www.devio.org/io/flutter_app/json/test_common_model.json');
        Utf8Decoder utf8decoder = Utf8Decoder(); //fix 中文乱码
        var result = json.decode(utf8decoder.convert(response.bodyBytes));
        return CommonModel.fromJson(result);
      }
    
    

    那我们写法是

      future: fetchPost(),
    

    避免重复网络请求:

    但是这样写会有一个问题,那就是当我们调用setstate的时候,将会刷新整个FutureBuilder,结果会是fetchPost这个方法会调用多次,造成了不必要的请求和资源浪费。所以我们建议这样写

      var _futureBuilderFuture;
      @override
      void initState() {
        _futureBuilderFuture = getDatas();
        super.initState();
      }
    
    

    引用的时候

      future: _futureBuilderFuture,
    

    这样当我们调用setstate的时候,就不会有多次网络请求了

    下来还有个问题,刚才是界面只有一个网络请求,那么假如有多个呢,写法如下:

      Future getDatas() async {
        
        return Future.wait([getDelegationData(), getData()]);
      }
    

    多网络请求:

    其中getDelegationData ,getData是两个单独的网络请求,写法如下

     Future getData() async {
        var data = {
          'iReq': "BTC_USDT",
        };
      TradeInfo response = await TradeService.getData(this, data.toString());
    }
    

    getDelegationData一样,不再给出,这样的话等两个请求都结束之后会返回一个新的Future到我们的FutureBuilder

       if (snapShot.connectionState == ConnectionState.waiting) {
                  return Text('Loading...');
                } else if (snapShot.connectionState == ConnectionState.done) {
                  print(snapShot.hasError);
                  print('data:${snapShot.data}');
                  if (snapShot.hasError) {
                    return Text('Error: ${snapShot.error}');
                  }
    

    这里的话就用到了snapShot的几种状态,用来判断网络请求处于哪一个阶段,等待(请求中),done完成,包括如果请求有异常的话,我们可以打印出来 return Text(‘Error: ${snapShot.error}’);

    注意事项:

    这里有一个情况就是我们在调用Future.wait([getDelegationData(), getData()]);的时候,请求网络的顺序是按参数的先后顺序执行的,先走getDelegationData请求,再走getData,但是返回数据结果的顺序却不能保证,因为是根据请求需要的时间决定的,异步的,所以我们尽量把数据处理放在ConnectionState.done之后再处理。

    多网络请求如何控制顺序:

    另外如果你的网络请求有逻辑关系,比如第一个接口的返回值要当做第二个接口的请求参数,那么写法如下

    Future testThen2()  asyn {
      Future getDatas() async {
      return getDelegationData().then((e){
        getData();
      });
      }
    // 请求顺序是从外层到里层即 getDatas=====getDelegationData===getData
    

    以上over,有不足之处请提出改正

    展开全文
  • FragMent,ViewPager 实现每个页面都请求网络。 配置Fragment集合以及Adapter 利用OnPageChangeListener 实现每次变换frag都请求数据。 先上效果图 点击第二访问数据 点击第一仍然从新请求数据, 核心的代码@...
  • html页面如何判断网络是否异常,异常后跳转到异常页面 还有就是用jquery.i18n.properties弄成多语言后,网络异常会显示多语言的key值,为什么会这样
  • 在一app中几乎每个页面都会涉及到数据为空的情况,这时候就要显示相应的空数据页面提示。 如果在每个页面的xml中都加入一布局,当数据为空时就显示这个页面,也可以达到效果,但是呢 这种做法不好,涉及到数十...
  • 并且当网络不好时,如果第一个页面访问时间很长,没有完成时,之前已经打开的页面也没有办法操作; 同时在网页前台卡顿的时候,网站的后台就没有办法访问了,造成的前后台的互相阻塞现象;网站情况网站是php后台 ...
  • 奥比网络游戏网站模板,全静态html页面.rar奥比网络游戏网站模板,全静态html页面.rar奥比网络游戏网站模板,全静态html页面.rar奥比网络游戏网站模板,全静态html页面.rar
  • html5页面简单判断当前有无网络

    万次阅读 2016-07-07 11:56:32
    判断当前网络是否有用法也是相当地简单: if (navigator.onLine) { alert('online'); } else { alert('offline'); } 我们可以通过事件的件的监听,去实时获取到网络状态的变化 window.addEventListener('...
  • 在Hybrid 当中,如何快速的判断一APP页面是原生的还是H5页面呢? 二、种方法 1.看断网的情况 把手机的网络断掉。然后点开页面。然后可以正常显示的东西就是原生写的。  显示404或则错误页面的是h
  • 网络爬虫:抓取页面图片

    千次阅读 2015-03-05 11:56:03
    爬虫就是根据页面的url来抓取页面的一些信息也就是页面的html代码,抓到后可以根据正则去匹配想要的片段,比如想要某一个页面中的一图片,那么这图片一定有自己的URL地址,可以正则匹配到这url 在进行图片下载...
  • 判断一APP页面是原生的还是H5页面

    千次阅读 2016-12-20 10:24:09
    把手机的网络断掉。然后点开页面。然后可以正常显示的东西就是原生写的。 显示404或则错误页面的是html页面。   2、看布局边界 可以打开 开发者选项中的显示布局边界,页面元素很多的情况下布局是一整块的是h5...
  • android网络请求与页面切换

    千次阅读 2014-11-25 13:33:34
    在android开发中会遇到使用fragment切换页面,并且切换的页面都会有网络请求,网络请求成功后会更新相应的fragment页面。如果使用异步网络请求组件android-async-http,会出现这样的情况,当你快速的切换fragment时...
  • 把手机的网络断掉。然后点开页面。然后可以正常显示的东西就是原生写的。 显示404或则错误页面的是html页面。   2、看布局边界 可以打开 开发者选项中的显示布局边界,页面元素很多的情况下布局是一整...
  • UIWebView是一能够显示网页的IOS视图控件,...2.将下载的页面以及页面资源加载到项目中,但必须选择Create folder references for any added folders,然后知道文件在项目中是蓝色显示,而不是黄色显示 3.将webVie
  • iOS如何在页面销毁时取消网络请求

    千次阅读 2018-01-26 17:09:54
    进入某个页面,做了某种操作(退出页面、切换某个tab等等)导致之前的请求变成无用请求,这时候有可能出现虽然页面已经销毁了,但是网络请求还在外面飞的情况,如果放任不管,那么这请求既浪费流量,又浪费性能,...
  • Vue 项目断网时跳转到网络错误页面

    千次阅读 2019-10-28 15:33:56
    在项目中做异常处理时经常会遇到对...首先添加网络错误页面(根据各自需求): 2.在router中添加错误页面的路由 { path:'/networkError', component:require('@/public-component/no-network.vue').default, ...
  • 访问某个网站的时候 Chrome 提示 "连接到网络 您正在使用的网络可能会要求您访问其登录页面",但是IE又可以访问该页面; 如图 解决方案: 重启网络 以win7为例子(其他win版类似) 1.控制面板找到网络和共享中心 ...
  • 原文:http://www.25xt.com/appdesign/11851.html 刚好是周末,无意之间学堂君在收集相关资料的时候,发现有部分童鞋在问《如何判断一APP页面是不是H5页面》或者是《如何判断app中原生页面和h5 页面》等等类似的...
  • 网络爬虫判断页面是否更新

    千次阅读 2013-11-14 19:53:20
     当第二次请求页面访问的时候,该页面如果未更新,则会反馈一304代码,而搜索引擎也会利用这304http状态码来进行判断页面是否更新。  首先第一次肯定是要爬取网页的,假设是A.html,这网页存储在磁盘上...
  • 页面回到上一个页面,实现上一个页面刷新算是ionic4比较难的部分了,其中踩了很多的坑,今天就彻彻底底的来解决一下这问题! 场景直现 1、此页面页面a,这是一相册,总共有两张图片,下面显示的是数字2 2、...
  • 微信小程序基本的开发框架抽取,包括网络请求的二次封装,页面状态管理,常见页面模板封装
  • Microsoft store应用商店无法加载页面代码: 0x80131500

    万次阅读 多人点赞 2019-11-23 22:10:54
    Microsoft store应用商店无法加载页面代码: 0x80131500 出错后我在微软官网查找问题原因,以下设置都可能解决问题:原文 建议先尝试更换网络连接,比如连接个人手机热点,再使用 Microsoft Store 进行尝试。...
  • 偌大的Internet,就像是一只蜘蛛织成的大网:一个个超级链接就是蛛丝,将无数页面连接起来,而网络爬虫,则会沿着一根根蛛丝,爬遍每一节点…… 网络爬虫能干嘛? 蜘蛛在网上爬来爬去,当然不是为了健身。...
  • #pragma mark - 单个页面个网络请求的情况(依次调用接口),等待所有网络请求结束后,再刷新UI - (void)loadHttpData{ dispatch_group_t group = dispatch_group_create(); dispatch_queue_t searialQueue = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 851,496
精华内容 340,598
关键字:

五个页面的网络页面