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