java - 从资源中获取位图

标签 java android nullpointerexception

我有以下代码将项目添加到 ArrayList:

    public Questions(int questionMode) {
            getID = new Random();
            allQuestions = new ArrayList<Question>();

            allQuestions.add(new Question(2, 0, 0, 2, 5, (BitmapFactory.decodeResource(getResources(), R.drawable.flag_dutch)), "The Netherlands", true)); //<-- error at this line
        }

我已经在类的构造函数中使用了 allQuestions,但是当我运行代码时,我得到了 NullPointerException。这是我的日志猫:

12-27 18:14:25.335: E/InputEventReceiver(3583): Exception dispatching input event.
12-27 18:14:25.335: E/MessageQueue-JNI(3583): Exception in MessageQueue callback: handleReceiveCallback
12-27 18:14:25.340: E/MessageQueue-JNI(3583): java.lang.NullPointerException
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.content.ContextWrapper.getResources(ContextWrapper.java:81)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at com.obattech.twoplayergame.Questions.createFlagQuestions(Questions.java:80)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at com.obattech.twoplayergame.Questions.<init>(Questions.java:54)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at com.obattech.twoplayergame.games.GuessFlag.startCountDown(GuessFlag.java:199)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at com.obattech.twoplayergame.games.GuessFlag$1.onTouch(GuessFlag.java:75)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.View.dispatchTouchEvent(View.java:7332)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2416)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2117)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2416)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2117)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2416)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2117)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2416)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2117)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2115)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1468)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.app.Activity.dispatchTouchEvent(Activity.java:2487)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2063)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.View.dispatchPointerEvent(View.java:7520)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3376)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3308)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4402)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4380)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4484)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.os.MessageQueue.nativePollOnce(Native Method)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.os.MessageQueue.next(MessageQueue.java:125)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.os.Looper.loop(Looper.java:124)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at android.app.ActivityThread.main(ActivityThread.java:4898)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at java.lang.reflect.Method.invokeNative(Native Method)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at java.lang.reflect.Method.invoke(Method.java:511)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
12-27 18:14:25.340: E/MessageQueue-JNI(3583):   at dalvik.system.NativeStart.main(Native Method)
12-27 18:14:25.340: D/AndroidRuntime(3583): Shutting down VM
12-27 18:14:25.340: W/dalvikvm(3583): threadid=1: thread exiting with uncaught exception (group=0x410e72a0)
12-27 18:14:25.350: E/AndroidRuntime(3583): FATAL EXCEPTION: main
12-27 18:14:25.350: E/AndroidRuntime(3583): java.lang.NullPointerException
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.content.ContextWrapper.getResources(ContextWrapper.java:81)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at com.obattech.twoplayergame.Questions.createFlagQuestions(Questions.java:80)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at com.obattech.twoplayergame.Questions.<init>(Questions.java:54)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at com.obattech.twoplayergame.games.GuessFlag.startCountDown(GuessFlag.java:199)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at com.obattech.twoplayergame.games.GuessFlag$1.onTouch(GuessFlag.java:75)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.View.dispatchTouchEvent(View.java:7332)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2416)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2117)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2416)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2117)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2416)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2117)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2416)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2117)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2115)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1468)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.app.Activity.dispatchTouchEvent(Activity.java:2487)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2063)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.View.dispatchPointerEvent(View.java:7520)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3376)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3308)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4402)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4380)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4484)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.os.MessageQueue.nativePollOnce(Native Method)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.os.MessageQueue.next(MessageQueue.java:125)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.os.Looper.loop(Looper.java:124)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at android.app.ActivityThread.main(ActivityThread.java:4898)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at java.lang.reflect.Method.invokeNative(Native Method)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at java.lang.reflect.Method.invoke(Method.java:511)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
12-27 18:14:25.350: E/AndroidRuntime(3583):     at dalvik.system.NativeStart.main(Native Method)

我认为这与从资源中获取位图有关,但我不知道如何修复它。

最佳答案

我假设 Questions 是您的 Activity,因为您将它用作 getResources() 的引用。

在这种情况下,您不能将内容放入构造函数中(初始化变量除外)并期望它们起作用; Activity 的资源此时尚未准备好使用。使用onCreate()相反:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getID = new Random();
        allQuestions = new ArrayList<Question>();

        allQuestions.add(new Question(2, 0, 0, 2, 5, (BitmapFactory.decodeResource(getResources(), R.drawable.flag_dutch)), "The Netherlands", true)); //<-- error at this line
    }

关于java - 从资源中获取位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14058561/

相关文章:

android - 为什么在添加线性布局 (Android) 时会出现空指针异常?

java - 搜索 View java.lang.NullPointerException

java - 读取BLE特征并将其写入文件

java - OpenTok-java-sdk 问题创建 SessionId 抛出异常

用于非常大的数字的快速乘法的 Java 库

Java 能否保证WeakHashMap entry check后不会消失

android - Meteor:尝试在我的设备中运行我的应用程序会出现依赖性错误

android - 如何在 android 中通过 ble 发送超过 20 字节的数据?

android - 调用新 Activity 时无法启动 Activity ComponentInfo : NullPointerException

java - ReadyStatement 的安全性如何?