我初学编程Android,我声明Boolean flag
,我想在内部类和return flag
中设置为true或false,但android studio说你应该声明最终!!!我不要&# 39; t想要声明final,因为我在变量flag
中设置了true或false。
我的问题是,我应该做什么
答案 0 :(得分:1)
您可以通过声明一个数组来执行此操作:
>>> stringkeys = [ str(key) for key, val in d.iteritems() if 'str' in str(val.__class__)]
>>> dtype = [(str(key), val.__class__) for key, val in d.iteritems() if not 'str' in str(val.__class__)] + [(key, 'S128') for key in stringkeys]
>>> dtype
[('a', <type 'float'>), ('c', <type 'int'>), ('b', <type 'float'>), ('d', <type 'numpy.ndarray'>), ('text', 'S128')]
在你的onResponse中设置值:
final boolean[] flag = {false};
当您点击帮助工具提示时,Android Studio会自动提出此解决方案。
答案 1 :(得分:1)
尝试将布尔值设为全局,就像在类外声明它一样。
答案 2 :(得分:1)
您无法在进行异步调用的方法中返回布尔值以检索该返回值。
而是在此类中创建一个接口,并在该方法签名中包含该接口的内联实现,并在成功或错误时回调。
public class yourHTTPClass{
public void yourMethod(myCallbacks callback){
doAsyncCall(){
onSuccess(){
callback.onSuccess();
}
}
}
public interface myCallbacks{
onSuccess();
onError();
}
}
public class OtherClass{
yourHTTPClassInstance.yourMethod(new myCallbacks(){
@Override
public void onSuccess(){
}
@Override
public void onError(){
}
}
}
以上是PSEUDO CODE。不要复制并粘贴它。不要指出它没有编译lol。只显示回调的实现:)。希望有所帮助。
答案 3 :(得分:1)
回答您的字面问题:
内部类真的无法访问外部变量(例如flag
),Java只会创建幻觉的访问权限。
从技术上讲,从实例化内部类的那一刻起,您将获得一个名为flag
的字段(由编译器自动创建),其中包含flag
变量内容的副本 。它类似于将flag
作为附加参数传递给构造函数并将其存储在同名的本地字段中。
但是,为了不破坏对flag
变量的访问的幻觉,Java禁止您更改flag
,因为从技术上讲,只有本地字段可以更改,不是外部变量。
因此,该部分的解决方案(已经被其他人提及)是使用boolean[] flagHolder = new boolean[1];
并使用flag[0]
进行通信。
但这对您的用例无济于事。
调用onResponse()
方法时(收到回复时),您的https()
方法很可能已经返回,因此无法看到后续响应可能导致的任何内容
一些正式的评论:
请不要将代码显示为屏幕截图(这是针对stackoverflow规则),而是将其作为文本复制到您的问题中。这使我们更容易进行自己的测试和改进......
答案 4 :(得分:0)
您正在执行的请求是异步的,这意味着它将始终返回false。调用result方法时,该值已经返回。使用回调方法来获取异步调用的结果