簡體   English   中英

Android Studio藍牙:-嘗試在空對象引用上調用虛擬方法

[英]Android Studio Bluetooth :- attempt to invoke a virtual method on a null object reference

我正在構建一個簡單的應用程序,該應用程序可以打開設備的藍牙並將其設置為可見。

我有一個單獨的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:致命例外:主進程:com.ai.mark.robot_dancing,PID:21314 java.lang.NullPointerException:嘗試調用虛擬方法'android.app.ActivityThread $ ApplicationThread android.app.ActivityThread.getApplicationThread()'在android.support.v4.app.FragmentActivity的android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)的android.app.Activity.startActivityForResult(Activity.java:3951)上引用空對象。 android.app.Activity.startActivityForResult(Activity.java:3912)(位於android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)(位於com.ai.mark.robot_dancing)上的startActivityForResult(FragmentActivity.java:77) .com.ai.mark.robot_dancing.Bluetooth_Panel $ .onClick(Bluetooth_Panel.java:146)上的android.view.View.performClick(View.java:5210)上的.Bluetooth_API.bluetooth_ON(Bluetooth_API.java:20) android.os.Handler.handleCallback的.View $ PerformClick.run(View.java:21328) (Handler.java:739)在android.os.Handler.dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java:148)在android.app.ActivityThread.main(ActivityThread.java: 5551)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:730)的java.lang.reflect.Method.invoke(本機方法)(在com.android.internal.os.ZygoteInit.main( ZygoteInit.java:620)

關於什么原因的任何想法? 謝謝。

不要在Activity構造函數中調用此類代碼:

blueAdp = BluetoothAdapter.getDefaultAdapter();

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM