繁体   English   中英

Java方法返回null

[英]Java Method returning null

我想读的输入流,我的问题是,虽然没有异常输出字符串输出(见下文)是正确的,这个方法总是返回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$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)

您的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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM