首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查Android上没有lambda表达式的internet访问(Levit)

检查Android上没有lambda表达式的internet访问(Levit)
EN

Stack Overflow用户
提问于 2018-03-17 10:44:13
回答 2查看 125关注 0票数 1

有谁能告诉我,没有lambda表达式的https://stackoverflow.com/a/27312494/9507009,这个答案相当于什么?

额外:一次AsyncTask示例 类InternetCheck扩展了AsyncTask {私有消费者mConsumer;公共接口消费者{虚空接受(布尔互联网);}公共InternetCheck(消费者消费者){mConsumer=使用者;execute();}@覆盖受保护的布尔doInBackground(MConsumer)。Sock.connect(新InetSocketAddress("8.8.8.8",53),1500);sock.close();返回真;} catch (IOException e) {返回false;}}@覆盖受保护的无效onPostExecute(布尔互联网){ mConsumer.accept( internet);} /////////////////////////////////////////////////////////////////////////////////// Usage新InternetCheck(internet -> { /*使用布尔响应*/ });

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-17 11:00:00

如果没有lambda表达式,它应该类似于:

代码语言:javascript
运行
复制
new InternetCheck(new InternetCheck.Consumer() {
    @Override
    public void accept(Boolean internet) {
        if (internet) {
            Log.d("TAG", "Internet is connected");
            doSomethingOnConnected();
        } else {
            Log.d("TAG", "Internet is not connected");
            doSomethingOnNoInternet();
        }     
    }
}).execute();
票数 1
EN

Stack Overflow用户

发布于 2018-12-12 11:31:30

代码语言:javascript
运行
复制
///////////////////////////////////////////////////////////////////////////////////
// Usage

    new InternetCheck(new InternetCheck.Consumer() {
        @Override
        public void accept(Boolean internet) { /* do something with boolean response */ } 
    });

..。例如,将是等效的非lambda表示(如@NongthonbamTonthoi也提到)。

添加到本代码-章节(作为作者)

活动上下文中使用它时,您可能需要检查App/Activity是否处于"onPause/onStop"-state中,因为应答/调用将是异步的,您可能依赖于它。

我在最初的答案中没有提到这一点,因为它涉及太多的细节,而是将布尔值设置为true in onResume,将其设置为false in onPause,并检查它(例如)。在我们的onPostExecute中,大多数情况下都是很好的实践。

(编辑)更多细节/示例:

代码语言:javascript
运行
复制
boolean mStopped;

@Override
protected void onStart() {
    super.onStart();
    mStopped = false;
}

@Override
protected void onStop() {
    mStopped = true;
    super.onStop();
}

以最简单的“只是为了安全”的方式,在您的accept-Method中检查它:

代码语言:javascript
运行
复制
    new InternetCheck(new InternetCheck.Consumer() {
        @Override public void accept(Boolean internet) { 
            if (mStopped) return; 

            /* ... */ 
        } 
    });

AsyncTask (=InternetCheck类)本身(在onPostExecute!)中检查它,这显然只有当它驻留在同一个文件/类中时,才有可能.

简而言之,解决这个问题的方法有很多,包括一个定制的(抽象的) Actvity-class,您的所有活动都继承了它;一个做类似事情的自定义App-class (如果做错了就可疑了!!);或者使用ContentProvider (良好实践,但是很多工作)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49335055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档