【问题标题】:Android Studio Bluetooth :- attempt to invoke a virtual method on a null object referenceAndroid Studio 蓝牙:- 尝试在空对象引用上调用虚拟方法
【发布时间】:2016-11-15 10:40:01
【问题描述】:

我正在构建一个简单的应用程序,它会打开设备的蓝牙并将其设置为可见。

我有一个单独的 java 类文件,它具有我需要的蓝牙功能,这些是通过所述类的对象从链接到我的活动的另一个 java 类调用的。

这是我的代码:

import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;

/**
 * Created by mark on 11/11/2016.
 */

public class Bluetooth_API extends AppCompatActivity{

    BluetoothAdapter blueAdp;

    public Bluetooth_API() {
        blueAdp = BluetoothAdapter.getDefaultAdapter();
    }

    protected int bluetooth_ON() {
        startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), 0);
        //blueAdp.enable(); //instead of above line - without alert dialog for permission
        return 0;
    }

    protected int bluetooth_OFF() {
        blueAdp.disable(); //
        return 0;
    }

    protected int bluetooth_setVisible() {
        if(!blueAdp.isDiscovering()) {
            startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE), 0);
        }
        return 0;
    }

}

这是调用我的函数的其他活动的代码部分:

 scanButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent nextLayout = new Intent(getApplicationContext(), com.ai.mark.robot_dancing.Scanning_Devices.class);
                startActivity(nextLayout);
                blue.bluetooth_ON();
                //blue.bluetooth_setVisible();
            }
        });

一旦我运行我的代码,我就会收到以下错误,我认为这与活动不是正确的活动有关,因为我的蓝牙功能在另一个文件中(我还尝试将方法复制到我的活动类,他们工作得很好)。

错误:

E/AndroidRuntime: 致命异常: main 进程:com.ai.mark.robot_dancing,PID:21314 java.lang.NullPointerException:尝试调用虚拟方法'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' 在一个空对象上 参考 在 android.app.Activity.startActivityForResult(Activity.java:3951) 在 android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:77) 在 android.app.Activity.startActivityForResult(Activity.java:3912) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859) 在 com.ai.mark.robot_dancing.Bluetooth_API.bluetooth_ON(Bluetooth_API.java:20) 在 com.ai.mark.robot_dancing.Bluetooth_Panel$6.onClick(Bluetooth_Panel.java:146) 在 android.view.View.performClick(View.java:5210) 在 android.view.View$PerformClick.run(View.java:21328) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5551) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

关于造成这种情况的任何想法? 谢谢。

【问题讨论】:

    标签: java android error-handling bluetooth


    【解决方案1】:

    不要在Activity构造函数中调用这样的代码:

    blueAdp = BluetoothAdapter.getDefaultAdapter();
    

    为此使用onCreate(android.os.Bundle)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        blueAdp = BluetoothAdapter.getDefaultAdapter();
    }
    

    【讨论】:

    • 谢谢!我猜问题是函数的返回没有找到要附加的活动。我这样认为是对的吗?
    • 是的。 ActvitityContext 尚未在构造函数中准备好。它是在onCreate() 事件中准备的。
    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多