【问题标题】:Universal Image Loader - Viewpager NullPointerException in imageloader.displayimage通用图像加载器 - imageloader.displayimage 中的 Viewpager NullPointerException
【发布时间】:2013-03-14 18:11:20
【问题描述】:

我在pastie 的第 98 行得到 NullPointerException,在我的定位 imageLoader.displayImage((String) myArr.get(position).get("image_url"), imageView, options, new SimpleImageLoadingListener().. 中等于第 191 行。

我所有的网址都存储在ArrayList<HashMap<String, Object>>

完整代码http://pastie.org/7108410#94

错误

    03-25 16:39:33.382: E/AndroidRuntime(18178): FATAL EXCEPTION: main
03-25 16:39:33.382: E/AndroidRuntime(18178): java.lang.NullPointerException
03-25 16:39:33.382: E/AndroidRuntime(18178):    at com.camitss.phnompenhcafe.ImagePagerActivity$ImagePagerAdapter.instantiateItem(ImagePagerActivity.java:191)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:801)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.support.v4.view.ViewPager.populate(ViewPager.java:930)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.support.v4.view.ViewPager.populate(ViewPager.java:881)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1366)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.View.measure(View.java:15479)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.View.measure(View.java:15479)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.View.measure(View.java:15479)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4824)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.View.measure(View.java:15479)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4824)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1396)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.View.measure(View.java:15479)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4824)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2359)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.View.measure(View.java:15479)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1966)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1212)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1385)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1105)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4452)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.Choreographer.doFrame(Choreographer.java:525)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.os.Handler.handleCallback(Handler.java:615)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.os.Looper.loop(Looper.java:137)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at android.app.ActivityThread.main(ActivityThread.java:4895)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at java.lang.reflect.Method.invokeNative(Native Method)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at java.lang.reflect.Method.invoke(Method.java:511)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
03-25 16:39:33.382: E/AndroidRuntime(18178):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: android url arraylist android-viewpager universal-image-loader


    【解决方案1】:

    您的ImageLoader imageLoader 始终为空。你需要初始化它。

    尝试替换:

    ImageLoader imageLoader;
    

    通过

    ImageLoader imageLoader = ImageLoader.getInstance();
    

    【讨论】:

    • 可是我已经声明了?以及如何初始化它以及使用什么?
    • @kongkea : 将 imageLoader.init(ImageLoaderConfiguration.createDefault(ImagePagerActivity.this)); 放入 ImagePagerAdapter 构造函数中
    • @ρяσѕρєяK 那行不通。你需要先给imageLoader赋值,比如ImageLoader imageLoader = new ImageLoader(...);
    • @kongkea : 查看Universal Image Loader for Android 并根据您的需要进行初始化
    • @fiddler 你能帮帮我吗?上面的完整源代码中的所有内容
    【解决方案2】:
    1. 在第 98 行设置断点并验证 imageView 不为空。
    2. 在第 98 行之前添加调试日志消息并打印出 myArr.get(position).get("image_url") 以查看这是否是有效的 url 并且实际上不为空。
    3. 设置断点时,确认 imageLoader 不为空

    至于如何在 Eclipse 中调试,我建议查看this SO question 和下面的答案

    【讨论】:

    • 你检查了 imageLoader 指针和 imageView 指针了吗?它们都不为空吗?
    • 如何同时查看imageLoader和ImageView?
    • 当你设置断点时(你需要在 eclipse 中以调试模式运行应用程序),一旦 eclipse 遇到断点就会停止。将鼠标光标放在 imageView 变量上,它将显示它的值。 imageLoader 也一样
    • 当我将光标移到 myArrposition 上时,它显示了我的价值,但我在 imageView 上显示了很多项目。我不知道哪一个给我看空图像。
    猜你喜欢
    • 2014-10-30
    • 2014-01-22
    • 2015-07-07
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 2013-09-16
    • 1970-01-01
    相关资源
    最近更新 更多