как решить ошибку imageadpter? - PullRequest
0 голосов
/ 04 мая 2011

привет, сейчас я пытаюсь создать папку в моей галерее, но мое приложение вылетает в этой строке ... как решить эту ошибку, пожалуйста, помогите мне ....

imagegrid.setAdapter(new ImAdapterh(getApplicationContext()));
System.out.println("index"+getApplicationContext());

код:

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-03 22:37:50.134: DEBUG/AndroidRuntime(1328): Shutting down VM
05-03 22:37:50.134: WARN/dalvikvm(1328): threadid=1: thread exiting with uncaught 
exception (group=0x4001d800)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328): FATAL EXCEPTION: main
05-03 22:37:50.184: ERROR/AndroidRuntime(1328): java.lang.RuntimeException: Unable to 
start activity 
 ComponentInfo{ImageViewExample.ImageViewExample/ImageViewExample
.ImageViewExample.ImageViewExample}: java.lang.NullPointerException
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at  
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
android.os.Handler.dispatchMessage(Handler.java:99)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
android.os.Looper.loop(Looper.java:123)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
android.app.ActivityThread.main(ActivityThread.java:4627)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
java.lang.reflect.Method.invokeNative(Native Method)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at   
java.lang.reflect.Method.invoke(Method.java:521)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
dalvik.system.NativeStart.main(Native Method)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328): Caused by: 
java.lang.NullPointerException
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
ImageViewExample.ImageViewExample.ImageViewExample$ImAdapterh.<init>  
(ImageViewExample.java:72)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at    
ImageViewExample.ImageViewExample.ImageViewExample
.init_phone_image_grid(ImageViewExample.java:49)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at   
ImageViewExample.ImageViewExample.ImageViewExample
.onCreate(ImageViewExample.java:36)
05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at   
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     at 
 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
 05-03 22:37:50.184: ERROR/AndroidRuntime(1328):     ... 11 more

1 Ответ

1 голос
/ 04 мая 2011

Я не думаю, что я действительно понимаю вопрос ... Однако вы получаете исключение нулевого указателя.

Это выглядит неправильно для меня:

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

Однако,это то же самое, что и в этом примере , поэтому я уверен, что все в порядке.

Если у вас происходит сбой приложения в этой строке (о чем вы сказали):

imagegrid.setAdapter(new ImAdapterh(getApplicationContext()));

Тогда кажется, что либо в этой строке должен быть ноль, либо побочный эффект одного из вызовов вызывает исключение.

Итак, очевидные возможности:

  1. imagegrid является нулевым в этой точке?Если это так, вызов метода для него вызовет нулевое исключение.Предположительно, вы где-то создали и инициализировали его, но не включили этот код.
  2. Возвращает ли getApplicationContext ненулевое значение?Он назначен в конструкторе для ImAdapterh, но не используется конструктором, но его стоит проверить.

Ваш ImAdapterh содержит следующие строки:

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

ThisМне кажется, что это может привести к ошибкам, хотя это может быть стилистически ... Я бы попробовал изменить его на:

File dir;
int count;
String[] fileNames;

Затем создайте объекты в вашем конструкторе для класса.Это также может дать вам лучшую трассировку стека, если одна из этих строк вызывает проблему (и позволяет вам установить точку останова в коде конструктора).

Я бы также установил точку останова в начале вашегоgetView, чтобы узнать, вызывается ли он в результате установки адаптера для imagegrid.

...