Java Android force close on split()函数
我正在使用android模拟器进行测试,当它执行此功能时,它强制关闭了应用程序。但是,在我注释掉以下语句后,该函数成功执行并生成了toast消息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
(例如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。。。