Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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
返回null的Java方法_Java_Nullpointerexception_Inputstream - Fatal编程技术网

返回null的Java方法

返回null的Java方法,java,nullpointerexception,inputstream,Java,Nullpointerexception,Inputstream,我想读取一个输入流,我的问题是这个方法总是返回null,尽管没有异常输出,并且字符串输出(见下文)正确。。 有人知道我如何解决这个问题吗 private ArrayList<String> getPlayer(String name){ try{ byte[] b = new byte[1024]; int numBytes; InputStream in = openFileInput(name); Arra

我想读取一个输入流,我的问题是这个方法总是返回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;
    }
}

while循环条件有问题

while((numBytes=in.read(b))!=0){

将此更改为:

while((numBytes=in.read(b))>0{


使用
!=
条件时会出现StringIndexOutOfBoundsException,因为当到达文件末尾时,
in.read
方法返回一个-1

由于StringIndexOutOfRangeException而发生错误。
您没有检查是否已到达流的结尾。正如Java文档所述,流的结尾由返回值-1指示。因此您应该执行
((numBytes=in.read(b)!=-1)

通过调试和检查引发的异常。如果它不是来自catch块,它不会返回null,因为上下文是实例化的。问题出在哪里?如果您没有提供任何Stacktrace或信息,我们将如何告诉您问题……您能改为打印一个Stacktrace并将其发布到这里吗?这里没有任何内容您的文件?我建议将
内容
移动到整个try catch之外,然后在发生错误时至少可以返回一个空列表。您的方法会抛出一个异常,因为您没有对照-1进行检查。因此,它会跳入catch块,返回null。这会导致在进一步的上下文中抛出另一个null poi特例
  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$1.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$3.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)