查看Busybox的版本使用此代码
public String 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:length = 0; regionStart = 0; java.lang.String.startEndAndLength(String.java:583)中的regionLength = 15 在java.lang.String.substring(String.java:1464)at com.MyPackage.MyApplicationName.Root.busybox_v(Root.java:98)at com.MyPackage.MyApplicationName.PageFragment $ 1.onClick(PageFragment.java:101) 在android.view.View.performClick(View.java:4240)at android.view.View $ PerformClick.run(View.java:17721)at android.os.Handler.handleCallback(Handler.java:730)at android.os.Handler.dispatchMessage(Handler.java:92)at android.os.Looper.loop(Looper.java:137)at android.app.ActivityThread.main(ActivityThread.java:5103)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:525)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:110)at dalvik.system.NativeStart.main(原生方法)
线98对应于while的闭合支撑。我无法理解如何解决这个问题。一些帮助?
答案 0 :(得分: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
}