找不到局部变量“ac”

S.B*_*.BM 6 java android android-debug

在我的代码下方,但它不起作用 - 请参阅调试期间错误的此屏幕截图

找不到局部变量“ac”

    AccountManager am = AccountManager.get(this);
    Account[] accounts = am.getAccounts();
    for (final Account ac : accounts)
    {
        String acname = ac.name;
        System.out.println("Accounts : " + acname);

    }
Run Code Online (Sandbox Code Playgroud)

Iul*_*scu 3

从您的屏幕截图中我看到您正在使用Android Studio并且您的代码没有问题,但有一些调试设置。如果您打开Android Studio首选项并转到,Build, Execution, Deployment > Debugger > Data Views您可能会看到该选项Enable auto expressions in Variables view被勾选,因为默认情况下它是勾选的。它应该看起来像这样:Android Studio 首选项 现在,如果您检查IntelliJ 文档,您会发现这一点(请注意,IntelliJ并且Android Studio在同一引擎上运行,以防您想知道为什么我说IntelliJ文档):

如果您希望 IntelliJ IDEA 调试器自动计算表达式并在调试工具窗口的变量窗格中显示相应的值,请选择此选项。

调试器分析断点附近的上下文(当前语句、之前的一条语句和之后的一条语句)。这样做是为了在源代码(如果可用)中查找各种表达式,例如 myvar.myfield。

如果此类表达式不包含显式方法调用,调试器将对其求值并在“变量”视图中显示相应的值。

基本上,他们说 IDE 将检查断点周围的代码以识别变量并计算它们的值(不包括方法调用)。也就是说,当控件到达accounts variable声明的行时,IDE 将检查代码中的变量并找到该ac变量,但无法计算其值,因为在执行点该变量尚未声明,因此整个操作将以找不到变量的消息结束。
要解决此问题,您必须从设置中取消选中该选项,或者您可以像这样保留它,因为它不会影响您的代码(它现在功能齐全)。