2013-08-31 157 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

哦,謝謝,我想到了,但認爲最終會讓它變得不可改變哈哈。 –