【发布时间】:2013-10-21 03:27:50
【问题描述】:
使用此代码查看 Busybox 的版本
public Stringbusybox_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; 在 java.lang.String.startEndAndLength(String.java:583) 处的 regionLength=15 在 java.lang.String.substring(String.java:1464) 在 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.java:737) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 在 de.robv.android.xposed.XposedBridge.main(XposedBridge.java:110) 在 dalvik.system.NativeStart.main(Native Method)
第 98 行对应于 while 的右大括号。我不明白如何解决这个问题。有什么帮助吗?
【问题讨论】:
-
buffer可能不包含 16 个字符(注:at java.lang.String.substring)。 -
您不能在大括号上获得异常。请仔细检查行号,或者您正在执行您认为的代码。
-
可能,关于如何解决这个问题的想法?在 Activity 中,我在 try-catch (IOExcepetion e) 中运行此方法
-
@SimonePiglietti 使用
0和15检查buffer长度是否对substring有效。
标签: java android xml string stringbuffer