如何在Android应用程序中获取每行进程输出?

时间:2019-06-30 15:35:21

标签: android kotlin output processbuilder

我正在使用以下代码:

var reader: Int = 0
val buffer = CharArray(4096)
var output = StringBuilder()
val process = processBuilder.start()
var inputStream =  BufferedReader(InputStreamReader(process.getInputStream()));

while ({ reader = inputStream.read(buffer); reader }() > 0) {
       output.append(buffer, 0, reader)
       println("Debug: " + output.toString())
      }
       inputStream.close()
       process.waitFor()

它工作正常,但是我有两个问题使其无法满足我的需求:

1)它不会实时检索每一行。它会缓冲实际输出中的一些行,并在每个循环中显示它们。

2)将结果附加。我只需要在每次迭代中输出实际的一行即可。

1 个答案:

答案 0 :(得分:0)

相当优雅的Kotlin式解决方案:


export default class ExportModal extends React.Component {

    constructor(props) {
        super(props);

        this.state = {
            roomIdNo: props.selectedRooms || [],

        };

while语句等效于Java:

                var output: String = ""
                val process = processBuilder.start()                 
                val inputStream =  BufferedReader(InputStreamReader(process.getInputStream()))
                while ( inputStream.readLine()?.also { output = it } != null) {
                    println("Debug: " + output)
                }
                 inputStream.close()
                 process.waitFor()

在Kotlin中,您不能在语句内部分配变量,但是使用Also链,可以包含要同时执行的额外代码。 readLine之后的Elvis运算符(?)允许“ it”为空,以便执行最新的检查。这是避免崩溃的必要条件。