Java 向GridView添加图像时AsyncTask崩溃

Java 向GridView添加图像时AsyncTask崩溃,java,android,android-layout,Java,Android,Android Layout,我已经设置了一个GridView来保存一些从SD卡加载的图像。但是,要加载的图像很多,因此我决定在后台线程上使用AsyncTask运行加载和重采样任务,并在加载图像后将图像添加到GridView。不幸的是,每当我运行代码时,我都会遇到以下错误: 01-01 19:49:40.239: E/AndroidRuntime(3851): FATAL EXCEPTION: main 01-01 19:49:40.239: E/AndroidRuntime(3851): java.lang.NullPoi

我已经设置了一个
GridView
来保存一些从SD卡加载的图像。但是,要加载的图像很多,因此我决定在后台线程上使用
AsyncTask
运行加载和重采样任务,并在加载图像后将图像添加到
GridView
。不幸的是,每当我运行代码时,我都会遇到以下错误:

01-01 19:49:40.239: E/AndroidRuntime(3851): FATAL EXCEPTION: main
01-01 19:49:40.239: E/AndroidRuntime(3851): java.lang.NullPointerException
01-01 19:49:40.239: E/AndroidRuntime(3851): at com.stullich.tim.woistmeinphoto.PhotoGalleryActivity.addImage(PhotoGalleryActivity.java:199)
01-01 19:49:40.239: E/AndroidRuntime(3851): at <packagename>.PhotoGalleryActivity.access$0(PhotoGalleryActivity.java:195)
01-01 19:49:40.239: E/AndroidRuntime(3851): at <packagename>.PhotoGalleryActivity$FileFetcher.onProgressUpdate(PhotoGalleryActivity.java:226)
01-01 19:49:40.239: E/AndroidRuntime(3851): at <packagename>.PhotoGalleryActivity$FileFetcher.onProgressUpdate(PhotoGalleryActivity.java:1)
01-01 19:49:40.239: E/AndroidRuntime(3851): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:618)
01-01 19:49:40.239: E/AndroidRuntime(3851): at android.os.Handler.dispatchMessage(Handler.java:99)
01-01 19:49:40.239: E/AndroidRuntime(3851): at android.os.Looper.loop(Looper.java:137)
01-01 19:49:40.239: E/AndroidRuntime(3851): at android.app.ActivityThread.main(ActivityThread.java:4514)
01-01 19:49:40.239: E/AndroidRuntime(3851): at java.lang.reflect.Method.invokeNative(Native Method)
01-01 19:49:40.239: E/AndroidRuntime(3851): at java.lang.reflect.Method.invoke(Method.java:511)
01-01 19:49:40.239: E/AndroidRuntime(3851): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
01-01 19:49:40.239: E/AndroidRuntime(3851): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
01-01 19:49:40.239: E/AndroidRuntime(3851): at dalvik.system.NativeStart.main(Native Method)
01-01 19:49:40.239:E/AndroidRuntime(3851):致命异常:主
01-01 19:49:40.239:E/AndroidRuntime(3851):java.lang.NullPointerException
01-01 19:49:40.239:E/AndroidRuntime(3851):位于com.stullich.tim.woistmeinphoto.PhotoGalleryActivity.addImage(PhotoGalleryActivity.java:199)
01-01 19:49:40.239:E/AndroidRuntime(3851):at.PhotoGalleryActivity.access$0(PhotoGalleryActivity.java:195)
01-01 19:49:40.239:E/AndroidRuntime(3851):at.PhotoGalleryActivity$FileFetcher.onProgressUpdate(PhotoGalleryActivity.java:226)
01-01 19:49:40.239:E/AndroidRuntime(3851):at.PhotoGalleryActivity$FileFetcher.onProgressUpdate(PhotoGalleryActivity.java:1)
01-01 19:49:40.239:E/AndroidRuntime(3851):位于android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:618)
01-01 19:49:40.239:E/AndroidRuntime(3851):在android.os.Handler.dispatchMessage(Handler.java:99)上
01-01 19:49:40.239:E/AndroidRuntime(3851):在android.os.Looper.loop(Looper.java:137)
01-01 19:49:40.239:E/AndroidRuntime(3851):位于android.app.ActivityThread.main(ActivityThread.java:4514)
01-01 19:49:40.239:E/AndroidRuntime(3851):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-01 19:49:40.239:E/AndroidRuntime(3851):在java.lang.reflect.Method.invoke(Method.java:511)
01-01 19:49:40.239:E/AndroidRuntime(3851):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
01-01 19:49:40.239:E/AndroidRuntime(3851):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
01-01 19:49:40.239:E/AndroidRuntime(3851):在dalvik.system.NativeStart.main(本机方法)
这是导致故障的代码:

final class FileFetcher extends AsyncTask<Void, LoadedImage, Void> 
{
  private Context mContext;

  public FileFetcher(Context context)
  {
     mContext = context;
  }

  @Override
  protected void onPreExecute()
  {
     loadImages(new File("/mnt/extSdCard/Bilder"));         
  }

  @Override
  public void onProgressUpdate(LoadedImage... value)
  {
     addImage(value);
  }

  @Override
  protected Void doInBackground(Void... rootDir) 
  {
     int i = 1;
     for (File f : directories)
     {
        File[] anImage = f.listFiles();
        if (anImage.length > 0)
        {
           Bitmap aMap = decodeSampledBitmapFromFile(anImage[0], 120, 120);
           publishProgress(new LoadedImage(aMap));
           i++;
        }
     }
     return null;

  }
}

//My addImage method
private void addImage(LoadedImage... value) 
{
  for (LoadedImage image : value) 
  {
      adapter.addPhoto(image);
      adapter.notifyDataSetChanged();
  }
}
final类FileFetcher扩展异步任务
{
私有上下文;
公共文件获取程序(上下文)
{
mContext=上下文;
}
@凌驾
受保护的void onPreExecute()
{
loadImages(新文件(“/mnt/extSdCard/Bilder”);
}
@凌驾
public void onProgressUpdate(LoadeImage…值)
{
addImage(值);
}
@凌驾
受保护的Void doInBackground(Void…rootDir)
{
int i=1;
用于(文件f:目录)
{
文件[]anImage=f.listFiles();
如果(anImage.length>0)
{
位图aMap=decodeSampledBitmapFromFile(anImage[0],120,120);
出版进度(新加载图像(aMap));
i++;
}
}
返回null;
}
}
//我的addImage方法
私有无效添加图像(加载图像…值)
{
用于(LoadeImage图像:值)
{
adapter.addPhoto(图片);
adapter.notifyDataSetChanged();
}
}

每次调用
addImage
方法时,似乎都会发生崩溃。位图总是返回,所以我不知道可以在哪里抛出
NullPointerException
。任何帮助都将不胜感激,因为我已经处理这个问题很久了。

我忘了在
onCreate
中初始化我的适配器,这导致了应用程序崩溃。

我忘了在
onCreate
中初始化我的适配器,这导致了应用程序崩溃。

你能为整个应用程序添加代码吗异步任务?以及将参数发送到AsyncTask的部分?第199行是什么?我猜它是
adapter.*
行之一,这意味着
adapter
可能为空。你在哪里定义它?谢谢@Eric,这解决了它。我忘了在OnCreate中分配适配器,这是我的一个疏忽。然后把你的问题和答案放在一起,这将对某人有所帮助。亲爱的,也接受你的答案。你能为你的整个任务添加代码吗?以及将参数发送到AsyncTask的部分?第199行是什么?我猜它是
adapter.*
行之一,这意味着
adapter
可能为空。你在哪里定义它?谢谢@Eric,这解决了它。我忘了在OnCreate中分配适配器,这是我的一个疏忽。然后把你的问题和答案放在一起。亲爱的,请接受你的答案。或者在初始化适配器之前启动AsyncTask。顺便说一句,loadImage应该只有on参数,或者在初始化适配器之前启动AsyncTask。顺便说一句,loadImage应该只有on参数。