Android的空指针错误 [英] android null pointer error

查看:321
本文介绍了Android的空指针错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我尝试从外部stroge获取文件名,但我有一个错误在哪里的问题?

 公共类MainActivity延伸活动{//保护ContextWrapper背景;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);    按钮测试=(按钮)findViewById(R.id.button1);
    test.setOnClickListener(新OnClickListener(){        @覆盖
        公共无效的onClick(视图v){
            // ContextWrapper语境=新ContextWrapper();
            // TODO自动生成方法存根
        //文件数据通路= Environment.getDataDirectory();
            //文件cacheDir =新的文件(context.getCacheDir(),临时文件);
            字符串extState =新的String();
            extState = Environment.getExternalStorageState();
            //文件amcuk = Environment.getExternalStorageDirectory();
            //字符串externalname =新的String();
            //字符串INTERNALNAME =新的String();
            //你可能还需要添加(... || Environment.MEDIA_MOUNTED_READ_ONLY)
            //如果你只在阅读文件系统感兴趣
            //尝试{
            字符串名称=新的String();
                如果(!extState.equals(Environment.MEDIA_MOUNTED)){
                    //这里处理错误
                    Log.d(SS,悲伤);}
                其他{
                    //文件f =新的文件(extState);
                    Log.d(WWW,www的);
                    Log.d(wwwaaaaaaaaaaaaaaa,wwwaaaaaaaaaaaaa);
                    文件sdCardRoot = Environment.getExternalStorageDirectory();
                    文件yourDir =新的文件(sdCardRootyourpath);
                    为(文件f:yourDir.listFiles()){
                        如果(f.isFile()){
                             名称= f.getName();
                            }
                            //使一些与名称
                    }
            } //赶上(例外五){
                // TODO:处理异常
                //Log.d(\"sasd,悲伤); * /
            //}            Log.d(dosyaadları,extState);
            //文件mydataDir =新的文件(路径,路径);            //Log.d(\"dosyaadları内部,INTERNALNAME);
        }
    });}@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
    //充气菜单;如果是present这增加了项目操作栏。
    。getMenuInflater()膨胀(R.menu.main,菜单);
    返回true;
}}

添加的manifest.xml权限

 <使用许可权的android:NAME =android.permission.WRITE_EXTERNAL_STORAG​​E/>

DDMS日志信息

  16 08-24:54:38.986:E / AndroidRuntime(2629):致命异常:主要
08-24 16:54:38.986:E / AndroidRuntime(2629):显示java.lang.NullPointerException
08-24 16:54:38.986:E / AndroidRuntime(2629):在com.example.fileexplorear.MainActivity $ 1.onClick(MainActivity.java:55)
08-24 16:54:38.986:E / AndroidRuntime(2629):在android.view.View.performClick(View.java:2461)
08-24 16:54:38.986:E / AndroidRuntime(2629):在android.view.View $ PerformClick.run(View.java:8890)
08-24 16:54:38.986:E / AndroidRuntime(2629):在android.os.Handler.handleCallback(Handler.java:587)
08-24 16:54:38.986:E / AndroidRuntime(2629):在android.os.Handler.dispatchMessage(Handler.java:92)
08-24 16:54:38.986:E / AndroidRuntime(2629):在android.os.Looper.loop(Looper.java:123)
08-24 16:54:38.986:E / AndroidRuntime(2629):在android.app.ActivityThread.main(ActivityThread.java:4632)
08-24 16:54:38.986:E / AndroidRuntime(2629):在java.lang.reflect.Method.invokeNative(本机方法)
08-24 16:54:38.986:E / AndroidRuntime(2629):在java.lang.reflect.Method.invoke(Method.java:521)
08-24 16:54:38.986:E / AndroidRuntime(2629):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858)
08-24 16:54:38.986:E / AndroidRuntime(2629):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
08-24 16:54:38.986:E / AndroidRuntime(2629):在dalvik.system.NativeStart.main(本机方法)

我55行

 的(文件f:yourDir.listFiles()){


解决方案

唯一可能的解释,我可以看到的是, listFiles()终止返回null。

的文档:


  

返回包含在由psented目录重新$ P $文件数组
  此文件。其结果是的,如果这个文件不是一个目录。该
  阵列中的文件的路径是绝对如果该文件的路径
  是绝对的,它们是相对的,否则。


  
  

返回


  
  

文件或空的数组。


所以,你的文件不是一个目录。

您可以尝试创建仅使用一个字符串参数到目录而不是你的文件

(并跳过你的yourpath参数):

 字符串sdCardRoot = Environment.getExternalStorageDirectory()的toString()。
    文件yourDir =新的文件(root_sd);
    文件列表[] = yourDir.listFiles();

构造了一个新的文件指定路径

hi i try get file name from external stroge but i have an error where is problem?

public class MainActivity extends Activity {

//protected ContextWrapper context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button test=(Button) findViewById(R.id.button1);
    test.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //ContextWrapper context = new ContextWrapper();
            // TODO Auto-generated method stub
        //  File datapath = Environment.getDataDirectory();
            //File cacheDir = new File(context.getCacheDir(),"tempfile");
            String extState = new String();
            extState=Environment.getExternalStorageState();
            //File amcuk=Environment.getExternalStorageDirectory();
            //String externalname=new String();
            //String internalname=new String();
            //you may also want to add (...|| Environment.MEDIA_MOUNTED_READ_ONLY)
            //if you are only interested in reading the filesystem
            //try {
            String name=new String();
                if(!extState.equals(Environment.MEDIA_MOUNTED)) {
                    //handle error here
                    Log.d("ss", "sad");}
                else {
                    //File f=new File(extState);
                    Log.d("www", "www");
                    Log.d("wwwaaaaaaaaaaaaaaa", "wwwaaaaaaaaaaaaa");
                    File sdCardRoot = Environment.getExternalStorageDirectory();
                    File yourDir = new File(sdCardRoot, "yourpath");
                    for (File f : yourDir.listFiles()) {
                        if (f.isFile()){
                             name = f.getName();
                            }
                            // make something with the name
                    }
            }// catch (Exception e) {
                // TODO: handle exception
                //Log.d("sasd", "sad");*/
            //}

            Log.d("dosya adları", extState);
            //File mydataDir =new File(path,"path");



            //Log.d("dosya adları internal", internalname);
        }
    });

}

@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);
    return true;
}

}

add manifest.xml permissions

   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

ddms log message is

08-24 16:54:38.986: E/AndroidRuntime(2629): FATAL EXCEPTION: main
08-24 16:54:38.986: E/AndroidRuntime(2629): java.lang.NullPointerException
08-24 16:54:38.986: E/AndroidRuntime(2629):     at com.example.fileexplorear.MainActivity$1.onClick(MainActivity.java:55)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.view.View.performClick(View.java:2461)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.view.View$PerformClick.run(View.java:8890)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.os.Handler.handleCallback(Handler.java:587)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.os.Looper.loop(Looper.java:123)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at android.app.ActivityThread.main(ActivityThread.java:4632)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at java.lang.reflect.Method.invokeNative(Native Method)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at java.lang.reflect.Method.invoke(Method.java:521)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
08-24 16:54:38.986: E/AndroidRuntime(2629):     at dalvik.system.NativeStart.main(Native Method)

my 55 line is

                        for (File f : yourDir.listFiles()) {

解决方案

The only possible explanation I can see is that listFiles() is returning null.

From the docs:

Returns an array of files contained in the directory represented by this file. The result is null if this file is not a directory. The paths of the files in the array are absolute if the path of this file is absolute, they are relative otherwise.

Returns

an array of files or null.

So, your file is not a directory.

You could try creating your file using only a string parameter to the dir instead

(and skip your "yourpath" parameter):

String sdCardRoot = Environment.getExternalStorageDirectory().toString();
    File yourDir = new File( root_sd ) ;       
    File list[] = yourDir.listFiles();

which constructs a new file using the specified path.

这篇关于Android的空指针错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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