Android应用程序错误NullPointerException异常? [英] Android app error NullPointerException?

查看:198
本文介绍了Android应用程序错误NullPointerException异常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图做一个Android应用程序,当一个按钮被点击进入手机的目录中,可以打开一个文件。这里是code我到目前为止有:

 包com.open1;进口的java.io.File;
进口java.io.FileInputStream中;
进口java.io.FileNotFoundException;
进口java.io.IOException异常;进口android.os.Bundle;
进口android.app.Activity;
进口android.view.Menu;
进口android.view.View;
进口android.widget.Button;
进口android.widget.Toast;
进口android.view.View.OnClickListener;公共类MainActivity延伸活动{    @覆盖    保护无效的onCreate(捆绑savedInstanceState){        super.onCreate(savedInstanceState);        的setContentView(R.layout.activity_main);    }    @覆盖    公共布尔onCreateOptionsMenu(菜单菜单){        //充气菜单;如果是present这增加了项目操作栏。        。getMenuInflater()膨胀(R.menu.main,菜单);        Button按钮=(按钮)findViewById(R.id.button1);        button.setOnClickListener(新OnClickListener(){            @覆盖            公共无效的onClick(查看视图){                Toast.makeText(MainActivity.this,单击按钮,Toast.LENGTH_SHORT).show();             //获取文件目录
                文件列表= this.getFilesDir();                的FileInputStream的InputStream = NULL;                字节[]字节=新字节[500];                INT fileIdx = -1;                对于(字符串列表:lister.list()){
                    fileIdx ++;
                    如果(list.endsWith(DDD)){
                        文件fil​​e = lister.listFiles()[fileIdx];
                        尝试{
                           的InputStream =新的FileInputStream(文件);
                           字节=新的字节[inputStream.available()];
                           inputStream.read(字节);
                        }赶上(FileNotFoundException异常五){
                           e.printStackTrace();
                        }赶上(IOException异常五){
                            e.printStackTrace();}
                        最后{
                            如果(的InputStream!= NULL){
                               尝试{
                                   inputStream.close();
                               }赶上(IOException异常五){
                                   e.printStackTrace();
                               }
                            }
                        }
                    }
                }            }            私人文件getFilesDir(){
                // TODO自动生成方法存根
                返回null;
            }        });        返回true;    }}

我可以看到错误,但无法做出如何解决这些问题的感觉。这里是logcat的:

  12月8日至22日:54:34.447:E /跟踪(22072):错误打开跟踪文件:没有这样的文件或目录(2)
十二月8日至22日:54:34.778:D / libEGL(22072):加载/system/lib/egl/libEGL_mali.so
十二月8日至22日:54:34.778:D / libEGL(22072):加载/system/lib/egl/libGLESv1_CM_mali.so
十二月8日至22日:54:34.788:D / libEGL(22072):加载/system/lib/egl/libGLESv2_mali.so
十二月8日至22日:54:34.828:D / OpenGLRenderer(22072):启用调试模式0
08-22 13:01:03.667:E /跟踪(22765):错误打开跟踪文件:没有这样的文件或目录(2)
08-22 13:01:03.817:D / libEGL(22765):加载/system/lib/egl/libEGL_mali.so
08-22 13:01:03.837:D / libEGL(22765):加载/system/lib/egl/libGLESv1_CM_mali.so
08-22 13:01:03.837:D / libEGL(22765):加载/system/lib/egl/libGLESv2_mali.so
08-22 13:01:03.887:D / OpenGLRenderer(22765):启用调试模式0
08-22 13:01:05.699:D / AndroidRuntime(22765):关闭VM
08-22 13:01:05.699:W / dalvikvm(22765):主题ID = 1:螺纹未捕获的异常退出(组= 0x417de318)
08-22 13:01:05.709:E / AndroidRuntime(22765):致命异常:主要
08-22 13:01:05.709:E / AndroidRuntime(22765):显示java.lang.NullPointerException
08-22 13:01:05.709:E / AndroidRuntime(22765):在com.open1.MainActivity $ 1.onClick(MainActivity.java:65)
08-22 13:01:05.709:E / AndroidRuntime(22765):在android.view.View.performClick(View.java:4103)
08-22 13:01:05.709:E / AndroidRuntime(22765):在android.view.View $ PerformClick.run(View.java:17117)
08-22 13:01:05.709:E / AndroidRuntime(22765):在android.os.Handler.handleCallback(Handler.java:615)
08-22 13:01:05.709:E / AndroidRuntime(22765):在android.os.Handler.dispatchMessage(Handler.java:92)
08-22 13:01:05.709:E / AndroidRuntime(22765):在android.os.Looper.loop(Looper.java:137)
08-22 13:01:05.709:E / AndroidRuntime(22765):在android.app.ActivityThread.main(ActivityThread.java:4744)
08-22 13:01:05.709:E / AndroidRuntime(22765):在java.lang.reflect.Method.invokeNative(本机方法)
08-22 13:01:05.709:E / AndroidRuntime(22765):在java.lang.reflect.Method.invoke(Method.java:511)
08-22 13:01:05.709:E / AndroidRuntime(22765):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)
08-22 13:01:05.709:E / AndroidRuntime(22765):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-22 13:01:05.709:E / AndroidRuntime(22765):在dalvik.system.NativeStart.main(本机方法)
08-22 13:01:08.722:I /流程(22765):发送信号。 PID:22765 SIG:9


解决方案

您的方法

 私人文件getFilesDir(){
            // TODO自动生成方法存根
            返回null;
        }

收益的返回值,然后使用此:

 文件列表= this.getFilesDir();
            ...
>>>>对于(字符串列表:lister.list()){

您显然是引用一个对象(这里:利斯特)已初始化

护理使用调试器和/或在你的 TODO 意见的工作?

I am trying to make an android app that when a button is clicked goes into the phones' directory and can open a file. Here is the code I have so far:

package com.open1;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.view.View.OnClickListener;



public class MainActivity extends Activity {



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }



    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main, menu);

        Button button = (Button) findViewById(R.id.button1);



        button.setOnClickListener(new OnClickListener() {



            @Override

            public void onClick(View view) {

                Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show();

             // get the files directory
                File lister = this.getFilesDir();

                FileInputStream inputStream = null;

                byte[] bytes = new byte[500];

                int fileIdx = -1;

                for (String list : lister.list()){
                    fileIdx++;
                    if(list.endsWith("ddd")){
                        File file = lister.listFiles()[fileIdx];
                        try {
                           inputStream = new FileInputStream(file);
                           bytes = new byte[inputStream.available()];
                           inputStream.read(bytes);
                        } catch (FileNotFoundException e) {
                           e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();}
                        finally {
                            if (inputStream != null) {
                               try {
                                   inputStream.close();
                               } catch (IOException e) {
                                   e.printStackTrace();
                               }
                            }
                        }
                    }
                }

            }

            private File getFilesDir() {
                // TODO Auto-generated method stub
                return null;
            }



        });

        return true;

    }



}

I can see the errors but can't make sense of how to fix them. Here is the logcat:

08-22 12:54:34.447: E/Trace(22072): error opening trace file: No such file or directory (2)
08-22 12:54:34.778: D/libEGL(22072): loaded /system/lib/egl/libEGL_mali.so
08-22 12:54:34.778: D/libEGL(22072): loaded /system/lib/egl/libGLESv1_CM_mali.so
08-22 12:54:34.788: D/libEGL(22072): loaded /system/lib/egl/libGLESv2_mali.so
08-22 12:54:34.828: D/OpenGLRenderer(22072): Enabling debug mode 0
08-22 13:01:03.667: E/Trace(22765): error opening trace file: No such file or directory (2)
08-22 13:01:03.817: D/libEGL(22765): loaded /system/lib/egl/libEGL_mali.so
08-22 13:01:03.837: D/libEGL(22765): loaded /system/lib/egl/libGLESv1_CM_mali.so
08-22 13:01:03.837: D/libEGL(22765): loaded /system/lib/egl/libGLESv2_mali.so
08-22 13:01:03.887: D/OpenGLRenderer(22765): Enabling debug mode 0
08-22 13:01:05.699: D/AndroidRuntime(22765): Shutting down VM
08-22 13:01:05.699: W/dalvikvm(22765): threadid=1: thread exiting with uncaught exception (group=0x417de318)
08-22 13:01:05.709: E/AndroidRuntime(22765): FATAL EXCEPTION: main
08-22 13:01:05.709: E/AndroidRuntime(22765): java.lang.NullPointerException
08-22 13:01:05.709: E/AndroidRuntime(22765):    at com.open1.MainActivity$1.onClick(MainActivity.java:65)
08-22 13:01:05.709: E/AndroidRuntime(22765):    at android.view.View.performClick(View.java:4103)
08-22 13:01:05.709: E/AndroidRuntime(22765):    at android.view.View$PerformClick.run(View.java:17117)
08-22 13:01:05.709: E/AndroidRuntime(22765):    at android.os.Handler.handleCallback(Handler.java:615)
08-22 13:01:05.709: E/AndroidRuntime(22765):    at android.os.Handler.dispatchMessage(Handler.java:92)
08-22 13:01:05.709: E/AndroidRuntime(22765):    at android.os.Looper.loop(Looper.java:137)
08-22 13:01:05.709: E/AndroidRuntime(22765):    at android.app.ActivityThread.main(ActivityThread.java:4744)
08-22 13:01:05.709: E/AndroidRuntime(22765):    at java.lang.reflect.Method.invokeNative(Native Method)
08-22 13:01:05.709: E/AndroidRuntime(22765):    at java.lang.reflect.Method.invoke(Method.java:511)
08-22 13:01:05.709: E/AndroidRuntime(22765):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-22 13:01:05.709: E/AndroidRuntime(22765):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-22 13:01:05.709: E/AndroidRuntime(22765):    at dalvik.system.NativeStart.main(Native Method)
08-22 13:01:08.722: I/Process(22765): Sending signal. PID: 22765 SIG: 9

解决方案

Your method

        private File getFilesDir() {
            // TODO Auto-generated method stub
            return null;
        }

returns null whose return value is then used here:

            File lister = this.getFilesDir();
            ...
>>>>        for (String list : lister.list()){

You are obviously referencing an object (here: lister) that has been initialized with null.

Care to use a debugger and/or working on your TODO comments?

这篇关于Android应用程序错误NullPointerException异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆