2016-07-16 67 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;