java - 适配器中的空指针异常

标签 java android

我的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;
       }
      }}

Logcat 错误:

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

最佳答案

Filelist() 方法可以返回 null。来自 Javadoc :

Returns: An array of strings naming the files and directories in the directory denoted by this abstract pathname. The array will be empty if the directory is empty. Returns null if this abstract pathname does not denote a directory, or if an I/O error occurs.

关于java - 适配器中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5881777/

相关文章:

java - 读取文本文件时检查不可打印字符的行

java - azure服务总线方法中的Abandon()向死信队列发送特定消息

java - 使用 JAX-WS 公开基于 servlet 的 Web 服务

java - Spring Boot 无法解析 Freemarker View

android - 如何处理(Delphi)Android 应用程序中的后退按钮?

java - 将 spring-reactor 集成到现有 Spring Framework 4 STOMP Over WebSocket 应用程序中

android - ActionBarSherlock - 将溢出的操作项显示为图标 + 文本

java - 封装和/或组织数据的策略

android - 如何调试 GLSurfaceView 的内部崩溃?

Android-GCM : How to take care of a logged out user?