java - 为什么我在 GridView 的 onMeasure 中得到空指针

标签 java android nullpointerexception universal-image-loader

当我尝试使用 Universal Image Loader 在 gridview 中设置图像时,出现空指针异常。崩溃发生在下载第一个图像时,并且在应用程序崩溃之前恰好下载了一个图像。 (通过 httpscoop 验证)

编辑: 这是错误的。崩溃发生在下载第一张图像之前,因此它可能会尝试测量不存在的图像。

这是我的griditem

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ImageView
    android:id="@+id/gridImageView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:src="@drawable/ic_launcher"
    android:contentDescription="@string/gallery_grid_image_desc"/>

gridview布局只是一个gridview

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/galleryPicturesGrid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:verticalSpacing="@dimen/gallery_grid_spacing"
    android:horizontalSpacing="@dimen/gallery_grid_spacing"
    android:numColumns="3" />

我的getView

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        ViewHolder holder = null;
        Log.d(TAG, "getView " + position);

        if (view == null) {
            view = ((Activity) context).getLayoutInflater().inflate(
                    R.layout.gallery_grid_item, null);
            holder = new ViewHolder();
            holder.thumb = (ImageView) view.findViewById(R.id.gridImageView);

            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }

        Picture picture = mPictures.valueAt(position);

        mImageLoader.displayImage(picture.getThumbUrl(), holder.thumb, mImageOptions);

        return null;
    }

ImageLoader 配置

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
            getApplicationContext()).memoryCacheSize(2 * 1024 * 1024)
            .discCache(new UnlimitedDiscCache(cacheDir))
            .denyCacheImageMultipleSizesInMemory()
            .offOutOfMemoryHandling()
            .threadPoolSize(4)
            .discCacheFileNameGenerator(new Md5FileNameGenerator())
            .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))
            .tasksProcessingOrder(QueueProcessingType.LIFO)
            .imageDownloader(new UrlConnectionImageDownloader(this))
            .build();

和选项

    galleryThumbImageOptions = new DisplayImageOptions.Builder()
    .showStubImage(R.drawable.p1_cover)
    .cacheOnDisc()
    .bitmapConfig(Bitmap.Config.RGB_565)
    .build();

和异常(exception)

01-18 10:56:15.434: E/AndroidRuntime(4089): FATAL EXCEPTION: main   
01-18 10:56:15.434: E/AndroidRuntime(4089): java.lang.NullPointerException
01-18 10:56:15.434: E/AndroidRuntime(4089):     at     android.widget.GridView.onMeasure(GridView.java:937)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.ViewRoot.performTraversals(ViewRoot.java:839)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.os.Looper.loop(Looper.java:123)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at android.app.ActivityThread.main(ActivityThread.java:3683)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at java.lang.reflect.Method.invokeNative(Native Method)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at java.lang.reflect.Method.invoke(Method.java:507)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-18 10:56:15.434: E/AndroidRuntime(4089):     at dalvik.system.NativeStart.main(Native Method)

最佳答案

getView() 返回 null 是错误的,您应该返回刚刚扩充或转换的行项目。

关于java - 为什么我在 GridView 的 onMeasure 中得到空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14391866/

相关文章:

java - 用户选择的选项不会触发if语句

Java - 比较两个字符串并将值分配给第三个变量?

java - 使用 websphere api 获取当前应用程序实例?

Android/Cordova 模拟器 : ERROR: virtual device name contains invalid characters

java - 无法实例化 Activity ComponentInfo; java.lang.NullPointerException

java - 如何区分JavaFX中的左/右shift、ctrl、alt和enter键?

android - 向渐变添加百分比

android - 从 URL 获取图像时显示 java.net.UnknownHostException : Host is unresolved in android device?

apache - 启动Apache槽时为nullpointerexception

java - 添加 DrawPanel 实例时覆盖整个 GUI 和空指针异常