2013-08-31 86 views
0

我有以下代码用来执行root的命令:变量的内部类中访问

public static String sudo(final String cmd, Context ctx) { 
    String output = null; //init string output 
    if (RootTools.isRootAvailable()) { 
     if (RootTools.isAccessGiven()) { 
      try { 
       CommandCapture command = new CommandCapture(0, cmd) { 
        @Override 
        public void output(int id, String line) { 
         Log.d("com.vwade79.aokpdelta.Functions.sudo", "cmd:"+cmd+"\noutput:"+line); 
         if (line.equals("")) { 
          return; 
         } 
         else { 
          output = line; //ERROR 
         } 
        } 
       }; 
       RootTools.getShell(true).add(command).waitForFinish(); 
      } catch (Exception e) { 
       Toast.makeText(ctx, "There was an error executing root command : "+cmd, Toast.LENGTH_LONG).show(); 
       e.printStackTrace(); 
      } 
     } 
     else { 
      Toast.makeText(ctx, "Root permission isn't given!", Toast.LENGTH_LONG).show(); 
      Intent intent = new Intent(ctx, MainActivity.class); 
      ctx.startActivity(intent); 
     } 
    } 
    else { 
     Toast.makeText(ctx, "You're not rooted! Come back when you are!", Toast.LENGTH_LONG).show(); 
     Intent intent = new Intent(ctx, MainActivity.class); 
     ctx.startActivity(intent); 
    } 
    return output; 
} 

我得到一个错误:

variable "output" is accessed from within inner class. Needs to be declared final. 

我不知道如何分配来自“内部阶层”的输出。

回答

5

错误消息说明了一切:您只能在内部类中访问final变量。

一个快速的解决方案是限定:

final String output[] = new String[1]; //init string output 

,并在内部类:

     output[0] = line; // No ERROR :-) 

然后:

return output[0]; 

这是,因为数组本身是最后,但数组的内容仍然可以改变(final的一个奇怪的定义Java,如果你问我;最终并不意味着不可变)。

+0

哦,谢谢,我想到了,但认为最终会让它变得不可改变哈哈。 –