java为什么我要在GridView的onMeasure中使用空指针
当我尝试使用Universal Image Loader在gridview中设置图像时,会出现nullpointer异常。崩溃发生在下载第一个映像时,而在应用程序崩溃之前,正好下载了一个映像。(与httpscoop一起检查)
编辑: 这是错误的。崩溃发生在下载第一个图像之前,因此它可能试图测量一个不存在的图像
这是我的行李
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:orientation="vertical" >
<ImageView
安卓:id="@+id/gridImageView"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:src="@drawable/ic_launcher"
安卓:contentDescription="@string/gallery_grid_image_desc"/>
gridview布局只是一个gridview
<GridView xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
安卓:id="@+id/galleryPicturesGrid"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:orientation="vertical"
安卓:verticalSpacing="@dimen/gallery_grid_spacing"
安卓:horizontalSpacing="@dimen/gallery_grid_spacing"
安卓: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();
例外呢
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 安卓.widget.GridView.onMeasure(GridView.java:937)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:386)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:309)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:531)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:309)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.View.measure(View.java:8313)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.ViewRoot.performTraversals(ViewRoot.java:839)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.view.ViewRoot.handleMessage(ViewRoot.java:1859)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.os.Handler.dispatchMessage(Handler.java:99)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.os.Looper.loop(Looper.java:123)
01-18 10:56:15.434: E/AndroidRuntime(4089): at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-18 10:56:15.434: E/AndroidRuntime(4089): at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-18 10:56:15.434: E/AndroidRuntime(4089): at dalvik.system.NativeStart.main(Native Method)
# 1 楼答案
从
getView()
返回null
是一个错误,您应该返回刚刚膨胀或转换的行项目