ArrayAdapter添加方法转换非法状态异常

时间:2015-05-09 19:18:20

标签: android exception android-arrayadapter

我在向数组适配器添加项目时遇到问题。

这是代码

   public void find_BondedDevices (View view) {

        // Look for bonded devices
        pairedDevices = btAdapter.getBondedDevices();

        if (pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
                String deviceBTName = device.getName();
                String deviceBTMajorClass = getBTMajorDeviceClass(device
                        .getBluetoothClass()
                        .getMajorDeviceClass());
                pairedDevicesAdapter.add(deviceBTName + "\n" + deviceBTMajorClass);
            }
        }

如果代码放在onCreate方法中,它就可以了!

如果我评论该行

pairedDevicesAdapter.add(deviceBTName + "\n" + deviceBTMajorClass);

它有效!

   java.lang.IllegalStateException: Could not execute method of the activity
                at android.view.View$1.onClick(View.java:3638)
                at android.view.View.performClick(View.java:4243)
                at android.view.View$PerformClick.run(View.java:17520)

android.app.ActivityThread.main(ActivityThread.java:5299)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:511)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
                at dalvik.system.NativeStart.main(Native Method)
         Caused by: java.lang.reflect.InvocationTargetException
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:511)
                at android.view.View$1.onClick(View.java:3633)
                at android.view.View.performClick(View.java:4243)
                at android.view.View$PerformClick.run(View.java:17520)
                at android.os.Handler.handleCallback(Handler.java:725)
                at android.os.Handler.dispatchMessage(Handler.java:92)
                at android.os.Looper.loop(Looper.java:153)
                at android.app.ActivityThread.main(ActivityThread.java:5299)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:511)
                at 

com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
                at dalvik.system.NativeStart.main(Native Method)
         Caused by: java.lang.NullPointerException
                at com.voice.benz.instaremote.MainActivity.find_BondedDevices(MainActivity.java:95)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:511)
                at android.view.View$1.onClick(View.java:3633)
                at android.view.View.performClick(View.java:4243)
                at android.view.View$PerformClick.run(View.java:17520)
                at android.os.Handler.handleCallback(Handler.java:725)
                at android.os.Handler.dispatchMessage(Handler.java:92)
                at android.os.Looper.loop(Looper.java:153)
                at android.app.ActivityThread.main(ActivityThread.java:5299)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:511)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
                at dalvik.system.NativeStart.main(Native Method)

我几乎尝试了所有但没有结果,我需要将此代码放在一个单独的函数中,因为在onCreate方法中没用了

以下是该应用的完整代码: http://pastebin.com/nZYdSkaA

有什么想法吗? 感谢

2 个答案:

答案 0 :(得分:2)

您已将适配器分配给本地变量 pairedDevicesAdapter ,而不是实例变量

它是onCreate()方法的本地参见:

0.011617 - (-0.138894) = 0.150512

因此,您的 pairedDevicesAdapter 是您用来调用方法的那个'添加'为空(从未初始化)。

修复:

onCreate()上的

只是这样做:

 ArrayAdapter<String> pairedDevicesAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);

答案 1 :(得分:0)

问题的主要原因是

 Caused by: java.lang.NullPointerException
                at com.voice.benz.instaremote.MainActivity.find_BondedDevices(MainActivity.java:95)

只有当你的pairedDevicesAdapter为空(即)时,才能检查你是否正确