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