2016-07-16 59 views
3

我想在Android上執行Delphi 10的命令行並獲取命令的輸出。德爾福10 - 在Android上執行命令行並獲得輸出生活

我使用的是從這裏的文件:

https://github.com/FMXExpress/android-object-pascal-wrapper/tree/master/android-23

這裏是我的代碼:

uses Classes, 
    Androidapi.Helpers, 
    java.lang.Process, java.lang.Runtime, 
    java.io.OutputStream, java.io.InputStream, 
    java.io.InputStreamReader, java.io.BufferedReader; 

procedure Execute(sCmd: string; sOut : TStringList); 
var Process : JProcess; 
    Runtime : JRuntime; 
    Input : JInputStream; 
    BuffInput : JBufferedReader; 
begin 

    Process := TJRuntime.JavaClass.getRuntime.exec(StringToJString(sCmd)); 
    //Input := JInputStream(Process.getInputStream); 
    BuffInput := JBufferedReader(jInputStreamReader(Process.getInputStream)); 
while (s = '') do 
begin 
    s := JStringToString(BuffInput.readLine); 
    sOut.Add(s); 
end; 

//--- Compile but get Segmentation fault(11) at 
// s := JStringToString(BuffInput.readLine); 

end; 
+0

你讀過爲Android文檔[' InputStream'](https://developer.android.com/reference/java/io/InputStream.html)和['OutputStream'](https://developer.android.com/reference/java/io/OutputStream.html )課程呢? –

+1

你用什麼方式卡住了? –

+0

-Remy,是的,我讀了它,但我沒有得到任何結果,對不起,即時通訊的所有android的東西noob。 –

回答

1

得益於好的評論肯白,我Digg的更多問題。

1:我需要使用Androidapi.JNI.JavaTypes且不的java.io.InputStream - > Input.available始終爲0,如果我從java.io.InputStream中

2使用:在執行我的命令後,我需要做Process.waitFor。我客人,我不能有像好老的DOS現場輸出

3:如果有人知道一個更好的方式來做到這一點,你的歡迎:P

procedure Execute(sCmd: string; sOut : TStringList); 
var Process : JProcess; 
    Runtime : JRuntime; 

    Input : JInputStream; 

    x, bufflen: Integer; 

    s: string; 
    buff : TJavaArray<Byte>; 

begin 
    Process := TJRuntime.JavaClass.getRuntime.exec(StringToJString(sCmd)); 
    Process.waitFor; 

    Input := Process.getInputStream; 
    bufflen := Input.available; 

    buff := TJavaArray<Byte>.Create(bufflen); 
    Input.read(buff); 

    s := ''; 

    for x := 0 to bufflen - 1 do 
    s := s + chr(buff[x]); 

    sOut.Add(s); 

end;