奇怪的logcat:如何解决?

时间:2013-10-13 12:47:59

标签: java android xml string stringbuffer

查看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的闭合支撑。我无法理解如何解决这个问题。一些帮助?

1 个答案:

答案 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
}