我有这个方法,通过执行命令“busybox”获得的outpout获取前16个字符
public String busybox_v() throws 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();
}
if (buffer.length()>=16)
{
String result = buffer.toString().substring(0, 15);
}
else
{
}
String result = buffer.toString().substring(0, 15);
return result;
之前,我遇到了这次崩溃
java.lang.StringIndexOutOfBoundsException: length=0; regionStart=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)
at com.MyPackage.MyApplicationName.PageFragment$1.onClick(PageFragment.java:101)
at 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)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:110)
at dalvik.system.NativeStart.main(Native Method)
第98行对应于while的结束括号,然后感谢你的用户建议堆栈Overloflow我把一个if-else检查长度是否实际上大于或等于16个字符,而不是崩溃应用程序。但是使用当前代码,应用程序崩溃了,因为我在另一个类中有这个代码
try {
String myResult=root.busybox_v();
if(myResult!=null&&myResult.length()>0) {
TextView1.setText(Html.fromHtml(("<b><font color=\"#009900\">"+myResult+"</font></b>")));
}
else {
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
);
你对我如何解决这个问题有什么想法吗?
答案 0 :(得分:0)
if (buffer.length()>=16)
{
String result = buffer.toString().substring(0, 15);
}
else
{
}
String result = buffer.toString().substring(0, 15); // this is the problem line
return result;
如果buffer.length
小于16,则执行标记有注释的行,如果缓冲区长度小于15,则该行将失败。
你的逻辑在某处错了。你应该改变它来处理缓冲区长度&lt; 16。
答案 1 :(得分:0)
更改此
if (buffer.length()>=16)
{
String result = buffer.toString().substring(0, 15);
}
else
{
}
String result = buffer.toString().substring(0, 15);
到
String result = "";
if (buffer.length()>=16)
{
result = buffer.toString().substring(0, 15);
}
else
{
result = buffer.toString();
}
return result;
如果长度小于16个字符,则返回整个字符串。