从服务Android运行课程

时间:2019-03-28 14:43:54

标签: android web-services service android-asynctask

WebService_modificar类已实现与数据库的连接,并通过.PHP文件更新了在EditText中捕获的日期,坐标等,并将其保存在我的远程bbdd中(我必须指出要执行来自Main的CLASS WebService_modificar是完美的)。但是现在我希望日期更新,坐标由CLASS Service在后台执行。 但是我不能从我的服务中执行同样的操作,也无法将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

2 个答案:

答案 0 :(得分:0)

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

编辑:

从更新中,我看到您需要WebService的BroadcastReceiver中的上下文。
为什么不使用在onReceive中获得的上下文作为参数?

此上下文为the Context in which the receiver is running

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

通过这种方式,无法链接到您的代码。

答案 1 :(得分:0)

感谢您对错误进行的调试。原因是他用文本版本的值修改了基字段的值,当然,当从Main(第一平面)执行Service web_modify类时,数据发生了变化,他将其毫无问题地修改了bbdd中的内容。 作为后台的ActivityMain我无法获取字段的值,也无法获取日期和其他数据的方法。

以同样的方式感谢大家的评论,因为它们使我能够进行调查并进一步掌握代码。