Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从被调用方法内的函数返回_Java_Android - Fatal编程技术网

Java 从被调用方法内的函数返回

Java 从被调用方法内的函数返回,java,android,Java,Android,我想知道是否有可能从被调用方法中包含的函数返回值 此方法获取html页面源代码,以便有时间返回值 但时间不是问题(或者可能是) 受保护的布尔布尔链接返回(字符串链接){ 布尔ret=false; Ion.with(getApplicationContext()).load(link).asString().setCallback(new FutureCallback()){ @凌驾 未完成公共void(异常e,字符串结果){ ret=真; /* 如果我在这里设置了“ret”(顺便说一句,我不能做

我想知道是否有可能从被调用方法中包含的函数返回值

此方法获取html页面源代码,以便有时间返回值

但时间不是问题(或者可能是)

受保护的布尔布尔链接返回(字符串链接){
布尔ret=false;
Ion.with(getApplicationContext()).load(link).asString().setCallback(new FutureCallback()){
@凌驾
未完成公共void(异常e,字符串结果){
ret=真;
/*
如果我在这里设置了“ret”(顺便说一句,我不能做,因为它需要声明为final)
函数将始终返回false
p、 我必须在这里做更多的事情,不仅仅是布尔运算
*/
}
});
返回ret;
}

有一种方法可以在方法内部代码的结果处返回base中的布尔值?

否,因为现在没有调用该函数。它在将来某个时间被调用(或者不被调用也是可能的)。无法返回该值,因为它尚未计算过,而且可能永远不会计算


正确的方法是让所有需要使用该值运行的代码都被放入onCompleted中,或者通过另一个回调函数从那里调用。

否,因为现在没有调用该函数。它在将来某个时间被调用(或者不被调用也是可能的)。无法返回该值,因为它尚未计算过,而且可能永远不会计算


正确的方法是将所有需要使用该值运行的代码都放在onCompleted中,或者通过另一个回调函数从那里调用。

这就是为什么您有机会使用回调函数。您不知道什么时候会得到响应(如果会的话),回调是一种执行代码以响应事件的方法


在您的情况下,如果您确实需要知道链接是否已打开,您可以更改策略并让回调作用于字段成员变量,匿名类/lambda允许修改这些变量

这只是一个通用草案:根据您的情况进行调整

class LinkOpenerAttempt {
    private boolean returned = false;
    private final String link;
    private final Context context;

    private final FutureCallback<String> returnCallback = new FutureCallback<String>() {
        @Override
        public void onCompleted(final Exception e, final String result) {
            LinkOpenerAttempt.this.returned = true;
        }
    };

    public LinkOpenerAttempt(final Context context, final String link) {
        this.link = link;
        this.context = context;
    }

    public void execute() {
        Ion.with(this.context)
                .load(link)
                .asString()
                .setCallback(this.returnCallback);
    }

    public boolean isReturned() {
        return this.returned;
    }
}
class-LinkOpenerAttempt{
返回的私有布尔值=false;
私有最终字符串链接;
私人最终语境;
private final FutureCallback returnCallback=新FutureCallback(){
@凌驾
未完成公共void(最终异常e,最终字符串结果){
linkopenerattempty.this.returned=true;
}
};
公共链接OpenerattEmpty(最终上下文上下文,最终字符串链接){
this.link=link;
this.context=上下文;
}
public void execute(){
Ion.with(this.context)
.加载(链接)
.asString()
.setCallback(此.returnCallback);
}
公共布尔值isReturned(){
归还这个;
}
}
如果有理由相信回调将在不同的线程上执行,则可能需要将变量标记为volatile


您还可以在活动中声明
回调
,并将其传递给类。

这就是为什么您有机会使用回调。您不知道什么时候会得到响应(如果会的话),回调是一种执行代码以响应事件的方法


在您的情况下,如果您确实需要知道链接是否已打开,您可以更改策略并让回调作用于字段成员变量,匿名类/lambda允许修改这些变量

这只是一个通用草案:根据您的情况进行调整

class LinkOpenerAttempt {
    private boolean returned = false;
    private final String link;
    private final Context context;

    private final FutureCallback<String> returnCallback = new FutureCallback<String>() {
        @Override
        public void onCompleted(final Exception e, final String result) {
            LinkOpenerAttempt.this.returned = true;
        }
    };

    public LinkOpenerAttempt(final Context context, final String link) {
        this.link = link;
        this.context = context;
    }

    public void execute() {
        Ion.with(this.context)
                .load(link)
                .asString()
                .setCallback(this.returnCallback);
    }

    public boolean isReturned() {
        return this.returned;
    }
}
class-LinkOpenerAttempt{
返回的私有布尔值=false;
私有最终字符串链接;
私人最终语境;
private final FutureCallback returnCallback=新FutureCallback(){
@凌驾
未完成公共void(最终异常e,最终字符串结果){
linkopenerattempty.this.returned=true;
}
};
公共链接OpenerattEmpty(最终上下文上下文,最终字符串链接){
this.link=link;
this.context=上下文;
}
public void execute(){
Ion.with(this.context)
.加载(链接)
.asString()
.setCallback(此.returnCallback);
}
公共布尔值isReturned(){
归还这个;
}
}
如果有理由相信回调将在不同的线程上执行,则可能需要将变量标记为volatile


您还可以在活动中声明
回调
,并将其传递给类。

谢谢,我将尝试另一种方法来构造代码谢谢,我将尝试另一种方法来构造代码谢谢您的回答,我将尝试一下,我已经使用了另一种方法,因为在我的例子中,我使用了for循环,这有点难以得到结果,所以我使用了另一种基于布尔函数的方法。谢谢你的回答,我会尝试一下,我已经使用了另一个方法,因为在我的例子中,我使用了for循环,这有点难以得到结果,所以我使用了另一个基于布尔值调用自身的方法