1

要查看 Busybox 的版本,请使用此代码

公共字符串busybox_v()抛出IOException {

Process p =Runtime.getRuntime().exec("busybox");
    InputStream a = p.getInputStream();
    InputStreamReader read = new InputStreamReader(a);
    BufferedReader in = new BufferedReader(read);
    StringBuilder buffer = new StringBuilder();

    String line = null;

    try {

        while ((line = in.readLine()) != null) {
            buffer.append(line);
        }

    } finally {
        read.close();
        in.close();
    }

    String result = buffer.toString().substring(0, 15);
    return result;

}

在大多数手机中运行良好,但在 Nexus 4 中,他们向我发送了这个 logcat

java.lang.StringIndexOutOfBoundsException:长度=0;区域开始=0;regionLength=15 at java.lang.String.startEndAndLength(String.java:583) at java.lang.String.substring(String.java:1464) at com.MyPackage.MyApplicationName.Root.busybox_v(Root.java:98)在 com.MyPackage.MyApplicationName.PageFragment$1.onClick(PageFragment.java:101) 在 android.view.View.performClick(View.java:4240) 在 android.view.View$PerformClick.run(View.java:17721)在 android.os.Handler.handleCallback(Handler.java:730) 在 android.os.Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:137) 在 android.app。 ActivityThread.main(ActivityThread.java:5103) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:525) 在 com.android.internal.os。 ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.

第 98 行对应于 while 的右大括号。我不明白如何解决这个问题。一些帮助?

4

1 回答 1

1

您的问题很可能是您的 StringBuffer 没有 16 个字符。你可以尝试这样的事情:

String result = buffer.toString().substring(0, Math.min(buffer.length()-1,15));

要知道更多,问题变成了结果试图做什么?如果它是十六进制代码,那么在这种情况下,您可能应该在前面附加 0。如果它是一个字符串,可能会附加空格。底线是,如果您没有输入 16 个字符,您应该弄清楚该怎么做,并采取适当的行动。这可以通过以下方式完成:

if (buffer.length()>=16)
{
    String result = buffer.toString().substring(0, 15);
}
else
{
    //Do something here to manage the exception
}
于 2013-10-13T12:51:45.023 回答