Java Android force close on split()函数

Java Android force close on split()函数,java,android,split,Java,Android,Split,我正在使用android模拟器进行测试,当它执行此功能时,它强制关闭了应用程序。但是,在我注释掉以下语句后,该函数成功执行并生成了toast消息(例如String1 | Sub1、Sub2、Sub3)。当我取消注释第一条split()语句并尝试运行测试时,它再次强制关闭应用程序 public void readData() { try { FileInputStream fin = openFileInput("data.txt"); InputS

我正在使用android模拟器进行测试,当它执行此功能时,它强制关闭了应用程序。但是,在我注释掉以下语句后,该函数成功执行并生成了toast消息
(例如String1 | Sub1、Sub2、Sub3)
。当我取消注释第一条split()语句并尝试运行测试时,它再次强制关闭应用程序

public void readData()
{
    try
    {
        FileInputStream fin = openFileInput("data.txt");
        InputStreamReader isr = new InputStreamReader(fin);
        BufferedReader br = new BufferedReader(isr);

        String line;

        do 
        {
            line = br.readLine();

            //String[] temp = line.split("|");
            //String[] temp2 = temp[1].split(",");

            //Vector<String> nameTemp = new Vector<String>(Arrays.asList(temp2));

            //Team container = new Team(temp[0], nameTemp);
            //grpContent.add(container);

            invalidCharacterToast(line);    //Toast message
        }
        while (line != null);

        br.close();
        isr.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}

这是一个do while循环,因此您的
br.readLine()
语句在null检查之前执行,因此第一个
split
方法可能会针对
null
执行

您应该将其改写为:

while ((line = br.readLine()) != null) {
    // your code
}

这是一个do while循环,因此您的
br.readLine()
语句在null检查之前执行,因此第一个
split
方法可能会针对
null
执行

您应该将其改写为:

while ((line = br.readLine()) != null) {
    // your code
}


您可以共享logcat吗?使用logcat检查与“强制关闭”关联的Java堆栈跟踪。如果您不理解堆栈跟踪告诉您的内容,请编辑您的问题并粘贴到堆栈跟踪中。您应该检查行是否为!=null只是为了添加到其他人的建议中--确保temp有多个元素,以便在引用temp[1]时,它不是IndexOutOfBoundsException。看起来该行为null。否则,您不应该在
split()
中遇到崩溃。您可以共享logcat吗?使用logcat检查与“强制关闭”关联的Java堆栈跟踪。如果您不理解堆栈跟踪告诉您的内容,请编辑您的问题并粘贴到堆栈跟踪中。您应该检查行是否为!=null只是为了添加到其他人的建议中--确保temp有多个元素,以便在引用temp[1]时,它不是IndexOutOfBoundsException。看起来该行为null。否则您不应该在
split()
Hi中遇到崩溃,谢谢您的帮助。但是,如果第一个split方法是针对null执行的,那么为什么toast消息会成功显示,并显示从文件中读取的字符串?@Mena:我怀疑您的意思是最后一个
split()
方法将针对
null
执行(否则,这将是一个无限循环)@commonware感谢您的观察!实际上,我指的是两个
split()
方法中的第一个。如果第一个
readLine()
调用返回
null
,或者如您所述,当读取最后一行时,因此返回
null
。@jl90如Commonware所述(另请参见我的警告),可能是第一个
Toast
(s)执行正常,因为行不是
null
。然而,在某个时刻,该行将
null
,但在退出所述循环之前仍将执行循环的迭代,因此NPE…嗨,感谢您的帮助。但是,如果第一个split方法是针对null执行的,那么为什么toast消息会成功显示,并显示从文件中读取的字符串?@Mena:我怀疑您的意思是最后一个
split()
方法将针对
null
执行(否则,这将是一个无限循环)@commonware感谢您的观察!实际上,我指的是两个
split()
方法中的第一个。如果第一个
readLine()
调用返回
null
,或者如您所述,当读取最后一行时,因此返回
null
。@jl90如Commonware所述(另请参见我的警告),可能是第一个
Toast
(s)执行正常,因为行不是
null
。然而,在某一点上,该行将
null
,但在退出所述循环之前仍将执行循环的迭代,因此NPE。。。