当前位置: 首页 > 知识库问答 >
问题:

尝试停止服务时的"null对象引用"

宗穆冉
2023-03-14

我想停止服务,但出现以下错误:

尝试调用虚拟方法的布尔值。所容纳之物上下文空对象引用上的stopService(android.content.Intent)

这是我停止服务的方法(在类公共类对话框中扩展AppCompatActivity):

public void stopService(Context context) {
    Intent serviceIntent = new Intent(context, PicovoiceService.class);
    stopService(serviceIntent);
}

这是我在另一个类中调用该方法的方式:

@SuppressLint("ValidFragment")
public class Popup extends DialogFragment {
    private final int _layout;
    private final Dialog mDialog = new Dialog();
    public boolean dialogIsActive = false;

    @SuppressLint("ValidFragment")
    public Popup(int layout) {
        _layout = layout;
    } 

    @SuppressLint({"ClickableViewAccessibility", "ResourceType"})
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        final View view =  inflater.inflate(_layout, container, false);

        // Display fragment_dialog
        if (_layout == R.layout.fragment_dialog) {

            // Toggle the listener
            view.findViewById(R.id.dialogCta).setOnClickListener(v -> {
                if (!dialogIsActive) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        if (mDialog.hasRecordPermission(getContext())) {
                            mDialog.startService(getContext());
                            dialogIsActive = true;
                        }
                    }
                }
                else {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        mDialog.stopService(getContext()); // <-- ERROR
                    }
                    dialogIsActive = false;
                }
            });
        }           
        return view;
    }       
}

代码。startService(getContext()) 工作正常,但 mDialog有什么问题。stopService(getContext())

我还尝试了Intent serviceentent=newintent(getBaseContext(),PicovoiceService)。阶级) 意图服务意图=新意图(getApplicationContext(),PicovoiceService)。阶级) 但是我得到了同样的错误。


共有1个答案

罗翰
2023-03-14

这就是我如何让它工作的方法

private Intent mServiceIntent = null;

public void startService(Context context) {
    mServiceIntent = new Intent(context, PicovoiceService.class);
    ContextCompat.startForegroundService(context, mServiceIntent);
}

public void stopTheService(Context context) {
    if (mServiceIntent != null) {
        context.stopService(mServiceIntent);
    }
}

当我在stopService()之前使用context时,错误消失了。

 类似资料:
  • 每当我尝试使用firebase auth注册用户时,我的应用程序就会崩溃。我的代码如下:

  • 我需要通过NodeManager重新启动托管服务器,但不需要AdminServer。 使用WLST,我可以使用NM启动Managedserver。(nmConnect,nmStart)。 但是对于在没有管理员的情况下停止托管服务器。我看到了选项nm杀手。但是我不想终止进程,而是想进行适当的关闭。 1.当管理员不可用时,是否可以使用WLST连接到托管服务器? 如果以上不是一种可能的关机方法,请在没有

  • 问题内容: 我已经到了秃顶几步之遥… 我正在尝试运行一项服务,该服务将检查我工作中的服务器是否正在运行。应该每5分钟执行一次。 我经历过TimerTask,ScheduledExecutorService,最后是Handler。他们都工作了好几个小时,除了一些不准确的地方外,还有1-5分钟的时间,然后突然,“计时器”就停止了发射。 现在,我已经了解到,如果Scheduler遇到未捕获的异常,它将停

  • 问题内容: 仅限Android Lollipop上的片段事务有一些有趣的问题。当我返回并删除以前添加的片段时,会发生崩溃。 这是stacktrace: 我如何进行交易: R.id.list_holder 我如何删除它: 我收到最后一个代码片段的崩溃信息。 更新 在我删除它之后,它不再崩溃了: slide_right: 问题答案: 交易中不使用方法而是使用从类扩展。在我从中移出后,它现在可以正常工作

  • 我的应用程序设置为(非故意)服务将使用gps/网络侦听器轮询位置。它工作得很好,因为我负责服务何时结束(即在找到新位置或达到超时时调用stopSelf())。然而,我最近读到,intentService可能更适合长时间运行的任务,因为它不是在ui线程上运行的,而是在自己的工作线程上运行的。问题是,现在它不允许服务在任何时间运行(我假设这是因为服务中没有任何活动发生,而侦听器等待接收位置,因此服务本

  • 问题内容: 在这里,我尝试了简单的服务程序。启动服务可以正常工作并生成Toast,但停止服务则不能。此简单服务的代码如下: 调用此服务的活动的代码如下: 使用该停止按钮帮助我停止服务,该按钮在onDestroy()方法中生成吐司。我已经在这里看到了很多有关停止服务问题的帖子,但并不令人满意,因此发布了新问题。希望得到满意的答复。 问题答案: 是错误的名字 您是否仅在此问题或代码中犯了错误?