Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Android:难以置信的StringIndexOutOfBoundsException_Php_Android_String_Exception - Fatal编程技术网

Php Android:难以置信的StringIndexOutOfBoundsException

Php Android:难以置信的StringIndexOutOfBoundsException,php,android,string,exception,Php,Android,String,Exception,我向Web服务器上返回3行文本的php脚本发送get请求。我按照如下方式处理来自服务器的响应: BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); line = ""; while ((line = rd.readLine()) != null) { String a = line.substring(0, line.indexOf('_'))

我向Web服务器上返回3行文本的php脚本发送get请求。我按照如下方式处理来自服务器的响应:

BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
line = "";
while ((line = rd.readLine()) != null) {
    String a = line.substring(0, line.indexOf('_'));
    String b = line.substring(line.indexOf('_') + 1);
}
1_485963\n\n
然后我像这样解析这些行:

BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
line = "";
while ((line = rd.readLine()) != null) {
    String a = line.substring(0, line.indexOf('_'));
    String b = line.substring(line.indexOf('_') + 1);
}
1_485963\n\n
这不断抛出StringIndexOutOfBounds异常,我真的不明白为什么。在我的项目中,我已经在其他地方使用了类似的方法(使用不同的PHP脚本返回不同的文本行和不同的解析),而且效果非常好。当我记录返回的行以查看它们是否正确地从服务器返回时,它们与PHP脚本发送的行相同

这里是有趣的部分。当我变得非常绝望时,我试着用以下方法测量这条线:

int l = line.length();
我的线路返回了11。然后,当我尝试使用以下方式显示某些内容时:

line.charAt(5);
它抛出了一个StringIndexOutOfBoundsException:5。我真的不知道这是怎么回事。有人有主意吗?谢谢

编辑

这是PHP脚本

$query = mysql_query("SELECT * FROM users");
while($row = mysql_fetch_array($query)) {
    print("{$row['id']}\n{$row['number']}\n");
}
这是我的java代码:

while ((line = rd.readLine()) != null) {
    Log.v("connection - user list", line); //This line logs: 1_485963
    //But this doesent work
    String a = line.substring(0, line.indexOf('_'));
    String b = line.substring(line.indexOf('_') + 1);
}

最有可能的是
indexOf
返回-1和
line.substring(0,-1)抛出
StringIndexOutOfBoundsException

编辑
是否您可能正在阅读
1\u 485963
行之后的不可见字符/行

假设输入如下:

BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
line = "";
while ((line = rd.readLine()) != null) {
    String a = line.substring(0, line.indexOf('_'));
    String b = line.substring(line.indexOf('_') + 1);
}
1_485963\n\n

然后在日志中,您将只看到
1\u 485963
,但第二次循环运行时它将崩溃。

最有可能
indexOf
返回-1和
line.substring(0,-1)抛出
StringIndexOutOfBoundsException

编辑
是否您可能正在阅读
1\u 485963
行之后的不可见字符/行

假设输入如下:

BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
line = "";
while ((line = rd.readLine()) != null) {
    String a = line.substring(0, line.indexOf('_'));
    String b = line.substring(line.indexOf('_') + 1);
}
1_485963\n\n

然后在日志中只会看到
1\u 485963
,但是第二次循环运行时它会崩溃。

首先尝试调试。或者试试这个

我很确定line.indexOf(“”)在给定字符串中不可用

1) 首先打印字符串的日志并检查“\u1”字符是否可用

尝试此操作以避免StringIndexOutOfBoundsException

while ((line = rd.readLine()) != null) {
if (line.indexOf('_') != -1) {
   String a = line.substring(0, line.indexOf('_'));
   String b = line.substring(line.indexOf('_') + 1);
    }else{
   // means that index is not found
   }
 }
最后你告诉字符串len=11 当在位置5打印字符时,抛出错误

检查在打印字符串的len和在位置5打印char之间,您在做什么


最后,有时您可能会从缓冲区输入流中获取垃圾字符。因为它从西北方向经过。也检查一下

首先尝试调试。或者试试这个

我很确定line.indexOf(“”)在给定字符串中不可用

1) 首先打印字符串的日志并检查“\u1”字符是否可用

尝试此操作以避免StringIndexOutOfBoundsException

while ((line = rd.readLine()) != null) {
if (line.indexOf('_') != -1) {
   String a = line.substring(0, line.indexOf('_'));
   String b = line.substring(line.indexOf('_') + 1);
    }else{
   // means that index is not found
   }
 }
最后你告诉字符串len=11 当在位置5打印字符时,抛出错误

检查在打印字符串的len和在位置5打印char之间,您在做什么


最后,有时您可能会从缓冲区输入流中获取垃圾字符。因为它从西北方向经过。也检查一下

也许我老了,瞎了,但这是怎么回事

    print("{$row['id']}\n{$row['number']}\n");
产生

1_485963
当然

print("{$row['id']}_{$row['number']}\n");
这就是你需要的。 道歉,如果这是无效的PHP作为语法的
一直拒绝留在我的脑子里。

也许我老了,瞎了,但这是怎么回事

    print("{$row['id']}\n{$row['number']}\n");
产生

1_485963
当然

print("{$row['id']}_{$row['number']}\n");
这就是你需要的。 道歉,如果这是无效的PHP作为语法的

一直拒绝留在我的脑子里。

如果找不到东西,indexOf返回-1-1不是有效的索引。对于第一个循环,您是否确实只传递至少包含一个不是最终字符的
\uuu
的字符串?无法解释第二位,但是:-/在尝试提取子字符串之前,确实应该将indexOf的结果与1和行-1的长度进行比较。是否绝对确定字符串中包含“\u1”字符?否则,“索引x()”将返回-1-是,我是肯定的,当我使用log .v显示行时,如果中间没有找到任何东西,在中间的“y”的整个字符串将显示索引返回1。1不是有效的索引。对于第一个循环,您是否确实只传递至少包含一个不是最终字符的
\uuu
的字符串?无法解释第二位,但是:-/在尝试提取子字符串之前,确实应该将indexOf的结果与1和行-1的长度进行比较。是否绝对确定字符串中包含“\u1”字符?否则,“index of()”将返回-1-是,我是肯定的,当我使用log .v显示行时,中间的“整”字符串显示得很好,但是当索引IM查找的字符位于字符串中时,它怎么返回?1?这也不能解释为什么简单的CARAT抛出一个异常,当我只是要求它在字符串中间的一个字符时,请张贴整个相关代码。你所经历的不应该发生。其他地方一定有问题。我也尝试使用if(line.length()<1)来确保这一点,但仍然不起作用。我真的不知道这里出了什么问题。但我设法克服了这一点,通过在单独的行中发送每个数据,所以我不必解析它。这现在可以很好地工作,但是当它的索引位于字符串中时,它如何返回-1呢?这也不能解释为什么简单的CARAT抛出一个异常,当我只是要求它在字符串中间的一个字符时,请张贴整个相关代码。你所经历的不应该发生。其他地方一定有问题。我也尝试使用if(line.length()<1)来确保这一点,但仍然不起作用。我真的不知道这里出了什么问题。但我设法克服了这一点,通过在单独的行中发送每个数据,所以我不必解析它。现在可以解决了,但是我现在没有从中得到任何东西,因为所有的数据都被扔掉在if语句中,因为它只是看不到st中的“u”