Java 适配器中出现空指针异常

Java 适配器中出现空指针异常,java,android,Java,Android,我的logcat指示一个空指针异常,我不知道如何解决这些空指针异常 我的适配器类中出现空指针异常: File dir=new File(Environment.getExternalStorageDirectory(),"/myImages/"); int count=dir.list().length; String[] fileNames = dir.list(); 检查上面的行。。。这是一个返回null的值 我的代码: package ImageViewExample.

我的logcat指示一个空指针异常,我不知道如何解决这些空指针异常

我的适配器类中出现空指针异常:

  File dir=new File(Environment.getExternalStorageDirectory(),"/myImages/");

  int count=dir.list().length; 

  String[] fileNames = dir.list();
检查上面的行。。。这是一个返回null的值

我的代码:

package ImageViewExample.ImageViewExample;

   import java.io.File;

   import android.R.string;
   import android.app.Activity;
   import android.content.Context;
   import android.content.Intent;
   import android.database.Cursor;
   import android.graphics.Bitmap;
   import android.graphics.BitmapFactory;
   import android.net.Uri;
   import android.os.Bundle;
   import android.os.Environment;
   import android.provider.MediaStore;
   import android.view.View;
   import android.view.ViewGroup;
   import android.widget.AdapterView;
   import android.widget.BaseAdapter;
   import android.widget.Gallery;
   import android.widget.GridView;
   import android.widget.ImageView;
   import android.widget.AdapterView.OnItemClickListener;

    public class ImageViewExample extends Activity {
    /** Called when the activity is first created. */
    private Cursor imagecursor, actualimagecursor;
    private int image_column_index, actual_image_column_index;
    GridView imagegrid;
    private int count;
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      init_phone_image_grid();
     }
     private void init_phone_image_grid() {
      String[] img = { MediaStore.Images.Thumbnails._ID };
      imagecursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, 
     img, null,null, MediaStore.Images.Thumbnails.IMAGE_ID + "");


     System.out.println("path"+managedQuery(MediaStore.Images
    .Thumbnails.EXTERNAL_CONTENT_URI, img, null,null, MediaStore.Images
     .Thumbnails.IMAGE_ID + ""));
      image_column_index =   
     imagecursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);
      System.out.println("index"+imagecursor.getColumnIndexOrThrow
     (MediaStore.Images.Thumbnails._ID));
      count = imagecursor.getCount();
      imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);

      imagegrid.setAdapter(new ImAdapterh(this));
      System.out.println("index"+this);
      imagegrid.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v,int position, long id) {
                          System.gc();
      String[] proj = { MediaStore.Images.Media.DATA };
    actualimagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
    proj,null,null, null);
       actual_image_column_index =   
    actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                  actualimagecursor.moveToPosition(position);
                  String i = actualimagecursor.getString(actual_image_column_index);
                  System.gc();
                  Intent intent = new Intent(getApplicationContext(), ViewImage.class);
                  intent.putExtra("filename", i);
                  startActivity(intent);
            }
      });
    }


   public class ImAdapterh extends BaseAdapter{

   File dir=new File(Environment.getExternalStorageDirectory(),"/Pictures/");
   int count=dir.list().length; 
   String[] fileNames = dir.list();

    private Context mContext;

   public ImAdapterh(Context c) {
       mContext = c;
    }

      public int getCount() {
       return count;
      }

      public Object getItem(int position) {
       return null;
      }

     public long getItemId(int position) {
       return 0;
      }

   // create a new ImageView for each item referenced by the Adapter
     public View getView(int position, View convertView, ViewGroup parent) {
       ImageView imageView = null;        


     for(String bitmapFileName : fileNames)
     {
          if (convertView == null) 
          {  // if it's not recycled, initialize some attributes
              imageView = new ImageView(mContext);
              imageView.setLayoutParams(new Gallery.LayoutParams(85, 85));
              imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
              imageView.setPadding(8, 8, 8, 8);                   

              Bitmap bmp = BitmapFactory.decodeFile(dir.getPath() + "/" +   
               bitmapFileName);
              System.out.println(dir);
              imageView.setImageBitmap(bmp);  
           }else 
           {
           imageView = (ImageView) convertView;            

           }
   } 
       return imageView;
       }
      }}
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): FATAL EXCEPTION: main
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): java.lang.RuntimeException: Unable to  
start activity  
ComponentInfo{ImageViewExample.ImageViewExample/ImageViewExample
.ImageViewExample.ImageViewExample}: java.lang.NullPointerException
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at   
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.os.Handler.dispatchMessage(Handler.java:99)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.os.Looper.loop(Looper.java:123)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at   
android.app.ActivityThread.main(ActivityThread.java:4627)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
java.lang.reflect.Method.invokeNative(Native Method)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
java.lang.reflect.Method.invoke(Method.java:521)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
dalvik.system.NativeStart.main(Native Method)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): Caused by:   
java.lang.NullPointerException
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
ImageViewExample.ImageViewExample.ImageViewExample$ImAdapterh.<init>
(ImageViewExample.java:71)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
ImageViewExample.ImageViewExample.ImageViewExample
.init_phone_image_grid(ImageViewExample.java:49)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at  
ImageViewExample.ImageViewExample.ImageViewExample.onCreate(ImageViewExample.java:36)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at   
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     ... 11 more
Logcat错误:

package ImageViewExample.ImageViewExample;

   import java.io.File;

   import android.R.string;
   import android.app.Activity;
   import android.content.Context;
   import android.content.Intent;
   import android.database.Cursor;
   import android.graphics.Bitmap;
   import android.graphics.BitmapFactory;
   import android.net.Uri;
   import android.os.Bundle;
   import android.os.Environment;
   import android.provider.MediaStore;
   import android.view.View;
   import android.view.ViewGroup;
   import android.widget.AdapterView;
   import android.widget.BaseAdapter;
   import android.widget.Gallery;
   import android.widget.GridView;
   import android.widget.ImageView;
   import android.widget.AdapterView.OnItemClickListener;

    public class ImageViewExample extends Activity {
    /** Called when the activity is first created. */
    private Cursor imagecursor, actualimagecursor;
    private int image_column_index, actual_image_column_index;
    GridView imagegrid;
    private int count;
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      init_phone_image_grid();
     }
     private void init_phone_image_grid() {
      String[] img = { MediaStore.Images.Thumbnails._ID };
      imagecursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, 
     img, null,null, MediaStore.Images.Thumbnails.IMAGE_ID + "");


     System.out.println("path"+managedQuery(MediaStore.Images
    .Thumbnails.EXTERNAL_CONTENT_URI, img, null,null, MediaStore.Images
     .Thumbnails.IMAGE_ID + ""));
      image_column_index =   
     imagecursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);
      System.out.println("index"+imagecursor.getColumnIndexOrThrow
     (MediaStore.Images.Thumbnails._ID));
      count = imagecursor.getCount();
      imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);

      imagegrid.setAdapter(new ImAdapterh(this));
      System.out.println("index"+this);
      imagegrid.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v,int position, long id) {
                          System.gc();
      String[] proj = { MediaStore.Images.Media.DATA };
    actualimagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
    proj,null,null, null);
       actual_image_column_index =   
    actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                  actualimagecursor.moveToPosition(position);
                  String i = actualimagecursor.getString(actual_image_column_index);
                  System.gc();
                  Intent intent = new Intent(getApplicationContext(), ViewImage.class);
                  intent.putExtra("filename", i);
                  startActivity(intent);
            }
      });
    }


   public class ImAdapterh extends BaseAdapter{

   File dir=new File(Environment.getExternalStorageDirectory(),"/Pictures/");
   int count=dir.list().length; 
   String[] fileNames = dir.list();

    private Context mContext;

   public ImAdapterh(Context c) {
       mContext = c;
    }

      public int getCount() {
       return count;
      }

      public Object getItem(int position) {
       return null;
      }

     public long getItemId(int position) {
       return 0;
      }

   // create a new ImageView for each item referenced by the Adapter
     public View getView(int position, View convertView, ViewGroup parent) {
       ImageView imageView = null;        


     for(String bitmapFileName : fileNames)
     {
          if (convertView == null) 
          {  // if it's not recycled, initialize some attributes
              imageView = new ImageView(mContext);
              imageView.setLayoutParams(new Gallery.LayoutParams(85, 85));
              imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
              imageView.setPadding(8, 8, 8, 8);                   

              Bitmap bmp = BitmapFactory.decodeFile(dir.getPath() + "/" +   
               bitmapFileName);
              System.out.println(dir);
              imageView.setImageBitmap(bmp);  
           }else 
           {
           imageView = (ImageView) convertView;            

           }
   } 
       return imageView;
       }
      }}
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): FATAL EXCEPTION: main
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): java.lang.RuntimeException: Unable to  
start activity  
ComponentInfo{ImageViewExample.ImageViewExample/ImageViewExample
.ImageViewExample.ImageViewExample}: java.lang.NullPointerException
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at   
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.os.Handler.dispatchMessage(Handler.java:99)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.os.Looper.loop(Looper.java:123)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at   
android.app.ActivityThread.main(ActivityThread.java:4627)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
java.lang.reflect.Method.invokeNative(Native Method)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
java.lang.reflect.Method.invoke(Method.java:521)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
dalvik.system.NativeStart.main(Native Method)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417): Caused by:   
java.lang.NullPointerException
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
ImageViewExample.ImageViewExample.ImageViewExample$ImAdapterh.<init>
(ImageViewExample.java:71)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
ImageViewExample.ImageViewExample.ImageViewExample
.init_phone_image_grid(ImageViewExample.java:49)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at  
ImageViewExample.ImageViewExample.ImageViewExample.onCreate(ImageViewExample.java:36)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at 
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     at   
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-04 01:41:31.705: ERROR/AndroidRuntime(1417):     ... 11 more
05-04 01:41:31.705:错误/AndroidRuntime(1417):致命异常:主
05-04 01:41:31.705:错误/AndroidRuntime(1417):java.lang.RuntimeException:无法
开始活动
ComponentInfo{ImageViewExample.ImageViewExample/ImageViewExample
.ImageViewExample.ImageViewExample}:java.lang.NullPointerException
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
access$2300(ActivityThread.java:125)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
android.os.Handler.dispatchMessage(Handler.java:99)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
Looper.loop(Looper.java:123)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
main(ActivityThread.java:4627)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
java.lang.reflect.Method.Invokenactive(本机方法)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
java.lang.reflect.Method.invoke(Method.java:521)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
dalvik.system.NativeStart.main(本机方法)
05-04 01:41:31.705:错误/AndroidRuntime(1417):由以下原因引起:
java.lang.NullPointerException
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
ImageViewExample.ImageViewExample.ImageViewExample$ImAdapterh。
(ImageViewExample.java:71)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
ImageViewExample.ImageViewExample.ImageViewExample
.init_phone_image_grid(ImageViewExample.java:49)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
ImageViewExample.ImageViewExample.ImageViewExample.onCreate(ImageViewExample.java:36)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-04 01:41:31.705:错误/AndroidRuntime(1417):在
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-04 01:41:31.705:错误/AndroidRuntime(1417):。。。还有11个
文件的
list()
方法可以返回
null
。从:

返回:一个字符串数组,命名此抽象路径名表示的目录中的文件和目录。如果目录为空,则数组将为空如果此抽象路径名不表示目录,或者发生I/O错误,则返回null。

在我看来,list()就是导致错误的那个,这可能是因为该文件夹(“/myImages/”)中没有文件

要解决此问题,您必须检查文件夹是否为空:

File dir=new File(Environment.getExternalStorageDirectory(),"/myImages/");
if(dir!=null &&dir.list()!=null)
{
 int count=dir.list().length; 
 String[] fileNames = dir.list();
 //...<REST OF THE CODE>
}else
{
  //do empty folder handler here.
}
File dir=新文件(Environment.getExternalStorageDirectory(),“/myImages/”;
if(dir!=null&&dir.list()!=null)
{
int count=dir.list().length;
字符串[]文件名=目录列表();
//...
}否则
{
//在此处执行空文件夹处理程序。
}

File dir=新文件(Environment.getExternalStorageDirectory(),“/myImages/”;
if(dir.list()==null)
{
dir.setList(new ArrayList());//如果LIST为null,则创建空列表。
}
int count=dir.list().length;
字符串[]文件名=目录列表();
//.. ..

列出不存在或您无权访问的目录的内容或文件数时,将引发空指针异常

检查以下各项:

  • 如果清单中提到了外部存储访问
  • 如果要列出其文件的目录实际存在于外部存储器中 同时发布堆栈跟踪和
    logCat
    输出。这也会帮助人们帮助你

    HTH,

    Sriram

    您可以发布
    NullPointerException
    的堆栈跟踪吗?哪一行给出了错误?在我看来,你是在暗示这是最后一行,但如果是这样,那么
    dir
    将为NULL,中间的一行也应该给出NULL指针。可能您的
    文件
    命令失败了?如何更正我的文件命令?公共类ImAdapterh extensed BaseAdapter可能重复{FILE dir=new FILE(Environment.getExternalStorageDirectory(),“/myImages/”;if(dir!=null&&dir.list()!=null){int count=dir.list().length;String[]fileNames=dir.list();/…]else{//do empty folder handler here.}int count=dir.list().length;String[]fileNames=dir.list();private Context mContext;现在我正在尝试实现您的代码..它指示语法错误,插入“}”以完成代码块尝试格式化**(CTRL+SHIFT+F)**并查看是否有多余的“{”此行有多个标记-ArrayList是原始类型。对泛型类型ArrayList的引用应参数化-类型文件的方法setList(ArrayList)未定义