从服务 Android 运行类

Posted

技术标签:

【中文标题】从服务 Android 运行类【英文标题】:Run class from a service Android 【发布时间】:2019-08-19 09:23:11 【问题描述】:

WebService_modificar 类实现了与数据库的连接,并通过 .php 文件更新了在我的 EditText 中捕获的日期、坐标等...,并将其保存在我的远程 bbdd 中(我必须指出要执行CLASS WebService_modificar 从 Main 它是完美的)。但现在我希望日期更新,坐标由 CLASS 服务在后台执行。 但是我不能从我的服务中做同样的事情,我不能把 ActivityMain.this 作为上下文。我应该如何从我的 Service 的 onStartCommand 方法运行“classJava”?

    private class MyReceiver extends BroadcastReceiver 
    @Override
    public void onReceive(Context context, Intent intent) 
        Location location = intent.getParcelableExtra(LocationUpdatesService.EXTRA_LOCATION);

            et_fechahora.setText(devuelveFechaHora());

            //Aquí hay que meter el webService actualizar
            new WebService_modificar(MainActivity.this).execute();

现在我想在 onStartCommand 方法中从我的 Service 运行我的 WebService_Modify 类,以便我在后台获取时间,但我收到了一个错误。

    @Override
public int onStartCommand(Intent intent, int flags, int startId) 
    Log.i(TAG, "Service started");
    boolean startedFromNotification = intent.getBooleanExtra(EXTRA_STARTED_FROM_NOTIFICATION,
            false);

    // We got here because the user decided to remove location updates from the notification.
    if (startedFromNotification) 
        removeLocationUpdates();
        stopSelf();
    
    // Le dice al sistema que SI intente volver a crear el servicio después de que se haya eliminado.
    return START_STICKY;

这里我把项目的链接留在 GitHub 上看看它更完整的可视化,从而能够解决错误。简而言之,我需要在后台向 bbdd 发送更新。当它运行并处于前台时,它会完美地完成它。让我们看看我们是否能找到解决方案。

https://github.com/Chiscu/kakao

【问题讨论】:

嗨,Chiscu,请阅读how to post a good question 以及如何创建Minimal, Complete, and Verifiable example 【参考方案1】:

您可以在服务中使用getApplicationContext(),而不是MainActivity.this

编辑:

从您的更新中,我看到您的 WebService 需要广播接收器中的上下文。 为什么不使用onReceive 中得到的 Context 作为参数呢?

这个上下文是the Context in which the receiver is running

如果您需要在服务内的onStartCommand 中使用上下文,getApplicationContext() 应该可以工作。

顺便说一句,您的代码链接不起作用。

【讨论】:

您确定您的服务类实际上扩展了Service? 我收到一个错误,因为我正在从服务类调用一个类,而这是从 ActivityMain 调用的 是的,并尝试从 onStartCommand() 方法执行 Java 类 你好,我已经重新发出问题了【参考方案2】:

感谢您对错误进行的调试。原因是他用文本版的值修改了base的字段值,当然当从Main(第一平面)执行类Service web_modify时,数据发生了变化,他把它拿来在bbdd中修改它们没有问题。 作为后台的ActivityMain,我不能获取字段的值,也不能获取获取日期和其他数据的方法。

同样感谢大家的 cmets,因为他们让我能够调查并更了解代码。

【讨论】:

以上是关于从服务 Android 运行类的主要内容,如果未能解决你的问题,请参考以下文章

从 android 连接到 XMPP 服务器

android前台服务以及通知

如何从android中的非Activity类调用服务方法

如何从 Android Studio 运行单个 Kotlin 类

将数据从 BroadCastReceiver 发送到正在运行的服务 (Android)

Android 相机 - 从服务在后台运行