Java 奇怪的logcat如何解决它的想法?

Java 奇怪的logcat如何解决它的想法?,java,android,xml,root,Java,Android,Xml,Root,我有一个方法,它通过执行命令“busybox”获得的output获取前16个字符 以前,我有过这次车祸 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.My

我有一个方法,它通过执行命令“busybox”获得的output获取前16个字符

以前,我有过这次车祸

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的右大括号,然后多亏了用户的建议,我添加了一个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();
    }
}



            }
        );
试试看{
字符串myResult=root.busybox_v();
if(myResult!=null&&myResult.length()>0){
TextView1.setText(Html.fromHtml(“+myResult+”));
}
否则{
}
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
);
你有没有办法解决这个问题

 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,则执行我用注释标记的行,如果buffer长度小于15,则该行将失败

你的逻辑在某个地方错了。您应该更改它以处理缓冲区长度<16的问题。

更改此选项

if (buffer.length()>=16)
{
    String result = buffer.toString().substring(0, 15);
}
else
{
}
String result = buffer.toString().substring(0, 15);


如果长度小于16个字符,这将返回整个字符串。

这样还必须更改相同方法的返回方法。对吗?我需要将公共字符串busybox\u v替换为?让我们不要忘记调用该方法的另一个类。我想我正在关注您。您需要确保结果字符串定义在正确的范围内。我已经更新了我的答案。
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;