gpt4 book ai didi

android - NullPointerException 在 Android 服务中获取 BluetoothManager

转载 作者:搜寻专家 更新时间:2023-11-01 08:49:51 26 4
gpt4 key购买 nike

我的 Discovery 类扩展了 Service 类。当我尝试通过这种方式从其他类获取其单调时:

Discovery discovery = Discovery.getInstance(); 

我收到 NullPointerException。这是发现代码:

public static Discovery getInstance(){
if (discovery == null){
discovery = new Discovery();
discovery.initDiscovery ();
}

Log.i(TAG, "get discovery instance");
return discovery;
}

public Discovery() {
}

private void initDiscovery(){
mDiscoveredDevices = new ArrayList<String>();
BluetoothManager bluetoothManager = (BluetoothManager) discovery.getSystemService(Context.BLUETOOTH_SERVICE);<--NullPointerException
....
}

最佳答案

我的 friend ,这不是 Android。

要创建服务,您需要在 list 中声明它:

  <service
android:name=".DiscoveryService" />


之后您可以实例化它,但永远不要使用 operator new。相反,您需要调用:

startService(context, new Intent(context, DiscoveryService.class);

还有其他方法可以触发服务 Intent ,但这就足够了。


服务的构建代码应该放在onCreate:

class DiscoveryService extends Service {

@Override
public void onCreate() {
service construction code here
}
}


及其在 onStartCommand 中的请求处理代码:

   public int onStartCommand(Intent intent, int flags, int startId) {
handle incoming intent
}


现在,如果您确实需要访问服务实例可能是最简单的方法实现它的方法是在其中声明和维护静态实例引用服务。这样做:

class DiscoveryService extends Service {

private static DiscoveryService inst; // <-----------------

public DiscoveryService getInstance() {
return inst;
}

@Override
public void onCreate() {
service construction code here
inst = this;
}

@Override
public void onDestroy() {
cleanup code here
inst = null;
}
}

此方法有其缺点,但与您的方法不同,它会奏效。仍需小心使用。


最后 - 多年编写和审查 Android 代码使我得出结论这是大多数新手开发人员在要求 Service 时想要的, 实际上是一个 IntentService ..请阅读文档并确保您的类(class)正确无误。

祝你好运。

关于android - NullPointerException 在 Android 服务中获取 BluetoothManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24575412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com