2011-08-26 126 views
0

我想運行諸如ping(或任何其他連續輸出)的可執行文件,並讀取其輸出並將其打印在我的GUI中。從java(Android)運行外部命令並讀取連續輸出

我用下面的方法來執行我的命令:

command=Runtime.getRuntime().exec("ping www.google.com"); 

,我讀輸出如下:

BufferedReader in = new BufferedReader(new InputStreamReader(command.getInputStream())); 

while ((line = in.readLine()) != null) { 
        System.out.println(line+"\n"); 
} 

這工作得很好,雖然顯示輸出時已經很遲相比,服用時時間我使用adb -d shell執行./excutable。

因爲我想這個輸出(線)在圖形用戶界面,所以我做一個TextView和其附加的輸出(線):

txtview=(TextView)findViewById(R.id.textview); 
while ((line = in.readLine()) != null) { 
        txtview.append(line+"\n"); 
        System.out.println(line+"\n"); 
} 

但這種崩潰我的應用程序。 請告訴我如何克服這個問題。

回答

1

如果您的最後一塊代碼正在執行Activity,那麼您可能會阻塞UI線程時間太長。這將導致Android強制關閉您的應用程序。嘗試使用AsyncTask來獲取輸出並更新您的GUI。

+0

但是,我如何讀取使用AsyncTask的BufferedReader並在TextView中顯示每行(因爲它們在BufferedReader中)? – d34th4ck3r

+0

您在doInBackground期間閱讀文本。您可以將每行傳遞給onProgressUpdate並更新其中的UI,也可以更新類成員變量。底線,你*有*做後臺線程閱讀! – elevine

+0

如何將String作爲參數傳遞給onProgressUpdate? – d34th4ck3r