gpt4 book ai didi

java - Android:使用从 InstrumentationTestCase 中的 UiAutomation.executeShellCommand() 返回的 ParcelFileDescriptor

转载 作者:行者123 更新时间:2023-11-30 02:05:06 30 4
gpt4 key购买 nike

我为我的 InstrumentationTestCase 子类编写了一个通用的 shellCommand 函数。对 executeShellCommand 的调用有效(命令已执行),但我对返回的 ParcelFileDescriptor 做错了,因为它似乎返回了垃圾。这是我的通用 shellCommand 函数 -

public String shellCommand(String str)
{
UiAutomation uia = getInstrumentation().getUiAutomation();
ParcelFileDescriptor pfd;
FileDescriptor fd;
InputStream is;
byte[] buf = new byte[1024];
String outputString = null;

try
{
pfd = uia.executeShellCommand(str);
fd = pfd.getFileDescriptor();
is = new BufferedInputStream(new FileInputStream(fd));
is.read(buf, 0, buf.length);
outputString = buf.toString();
Log.d(TAG, String.format("shellCommand: buf '%s'",outputString));
is.close();
}
catch(IOException ioe)
{
Log.d(TAG, "shellCommand: failed to close fd");
}
return outputString;
}

这是我调用它的 fragment -

String output = shellCommand("ls -al /");
Log.d(TAG, String.format("root dir = {%s}", output));

我希望收到命令的输出字符串(在本例中,是顶级目录列表)。相反,我看到了以下日志 -

shellCommand: buf '[B@1391fd8d'

我对 Java 不是很了解,我只是用它来编写一些自动化测试。我显然在使用 ParcelFileDescriptorBufferedInputStream 做错了什么,有人可以解释一下吗?

最佳答案

toString()方法实际上并不将字节数组的内容转换为字符串。它返回“对象的字符串表示”。在这种情况下,'[B@1391fd8d' 表示“哈希码为 1391fd8d 的字节数组”- 不是很有用吗?

您可以使用新的 String(byte[]) 将 byte[] 转换为 String构造函数。

但是 BufferedReader.readLine() 可能更容易使用直接从每行输出中获取一个字符串。

关于java - Android:使用从 InstrumentationTestCase 中的 UiAutomation.executeShellCommand() 返回的 ParcelFileDescriptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30800862/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com