Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从SQLiteOpenHelper类内部调用服务?_Java_Android_Intentservice - Fatal编程技术网

Java 如何从SQLiteOpenHelper类内部调用服务?

Java 如何从SQLiteOpenHelper类内部调用服务?,java,android,intentservice,Java,Android,Intentservice,在安卓系统中,我需要在数据库查询之后立即启动一项服务,这样我就可以从应用程序中请求丢失的字节。我这样称呼它: Intent service = new Intent("br.com.company.intent.DO_CHUNK_REQUEST"); service.putExtra("FIELD_NAME", fieldName); service.putExtra("JOB_NAME", jobName); service.putExtra("START_BYTE", 500); servi

在安卓系统中,我需要在数据库查询之后立即启动一项服务,这样我就可以从应用程序中请求丢失的字节。我这样称呼它:

Intent service = new Intent("br.com.company.intent.DO_CHUNK_REQUEST");
service.putExtra("FIELD_NAME", fieldName);
service.putExtra("JOB_NAME", jobName);
service.putExtra("START_BYTE", 500);
service.putExtra("LENGTH", 100);
AWS myCall = new AWS();
myCall.chama_servico(service);
package br.com.company.AWService;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class AWS extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    public void chama_servico (Intent service) {
        startService(service);
    }
}
我创建了另一个类作为服务调用方,因为我不能同时将我的类扩展到SQLiteOpenHelper和服务。我的课是这样的:

Intent service = new Intent("br.com.company.intent.DO_CHUNK_REQUEST");
service.putExtra("FIELD_NAME", fieldName);
service.putExtra("JOB_NAME", jobName);
service.putExtra("START_BYTE", 500);
service.putExtra("LENGTH", 100);
AWS myCall = new AWS();
myCall.chama_servico(service);
package br.com.company.AWService;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class AWS extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    public void chama_servico (Intent service) {
        startService(service);
    }
}

但是当我运行这段代码时,我在startServiceservice上得到一个NullPointerException。我做错了什么?是否有更好/正确的方法在数据库查询后调用服务


谢谢

我们从不在代码中创建服务对象。。您必须重新审视服务理念

AWS myCall = new AWS();// Bad Practice

如果它的业务需求是肯定的,我们可以这样做,并确保在单独的线程中运行服务代码,就像在调用它的同一线程中默认运行服务符文一样

是否有更好/正确的方法在数据库查询后调用服务?-让执行查询的人调用服务。问题是,查询可能会导致对服务的多次调用。我必须将所有丢失的字节存储在列表或哈希映射中。这不是服务中的问题。启动服务时,将始终调用名为onStartCommand的方法。如果您想避免这种情况,可以通过使用标志来控制,以了解服务是否已在运行。