Java 返回 null 的方法
Java Method returning null
我想读取一个输入流,我的问题是这个方法总是 returns null 尽管没有异常输出并且字符串输出(见下文)是正确的..
有人知道我该如何解决这个问题吗?
private ArrayList<String> getPlayer(String name){
try{
byte[] b = new byte[1024];
int numBytes;
InputStream in = openFileInput(name);
ArrayList<String> content = new ArrayList<String>();
while((numBytes = in.read(b)) != 0){
content.add(new String(b, 0, numBytes, "UTF-8"));
String string = new String(b, 0, numBytes, "UTF-8");
System.out.println(string); //StringOutput
}
return content;
}catch(Exception e){
System.out.print(e.getMessage()); //ExceptionOutput
return null;
}
}
抛出并使应用程序停止的异常:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: auldo.trainersoccer, PID: 7733
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
at auldo.trainersoccer.ManageSpielerActivity.onItemClick(ManageSpielerActivity.java:60)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3066)
at android.widget.AbsListView.run(AbsListView.java:3903)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
你的 while 循环条件有问题
while((numBytes = in.read(b)) != 0){
将此更改为:
while((numBytes = in.read(b)) > 0){
当您使用 !=
条件时会发生 StringIndexOutOfBoundsException,因为当您到达文件末尾时,in.read
方法 returns a -1
错误的发生是由于 StringIndexOutOfRangeException。
您没有检查是否已到达流的末尾。正如 Java 文档所述,流的结尾由 -1 的 return 值指示。所以你应该做 ((numBytes = in.read(b) != -1)
.
我想读取一个输入流,我的问题是这个方法总是 returns null 尽管没有异常输出并且字符串输出(见下文)是正确的.. 有人知道我该如何解决这个问题吗?
private ArrayList<String> getPlayer(String name){
try{
byte[] b = new byte[1024];
int numBytes;
InputStream in = openFileInput(name);
ArrayList<String> content = new ArrayList<String>();
while((numBytes = in.read(b)) != 0){
content.add(new String(b, 0, numBytes, "UTF-8"));
String string = new String(b, 0, numBytes, "UTF-8");
System.out.println(string); //StringOutput
}
return content;
}catch(Exception e){
System.out.print(e.getMessage()); //ExceptionOutput
return null;
}
}
抛出并使应用程序停止的异常:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: auldo.trainersoccer, PID: 7733
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
at auldo.trainersoccer.ManageSpielerActivity.onItemClick(ManageSpielerActivity.java:60)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1145)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3066)
at android.widget.AbsListView.run(AbsListView.java:3903)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
你的 while 循环条件有问题
while((numBytes = in.read(b)) != 0){
将此更改为:
while((numBytes = in.read(b)) > 0){
当您使用 !=
条件时会发生 StringIndexOutOfBoundsException,因为当您到达文件末尾时,in.read
方法 returns a -1
错误的发生是由于 StringIndexOutOfRangeException。
您没有检查是否已到达流的末尾。正如 Java 文档所述,流的结尾由 -1 的 return 值指示。所以你应该做 ((numBytes = in.read(b) != -1)
.