Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Posso passar o tempo de atualização do requestLocationUpdates carregando do banco?

Quero colocar uma configuração aonde o tempo em que será buscada uma posição é configurado pelo usuário em minutos

o seguinte código funciona, mas ao fechar a aplicação ele da um erro

       Integer minutes = account().getInteval();
        if (minutes == null || minutes == 0) {
            minutes = 1;
        };
        Integer seconds = minutes * 60;
        Integer milliseconds = (seconds * 1000);

locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,
                            milliseconds,
                            0, this);

mas se eu colocar o milliseconds como um constante ele funciona

a unica differença é que nao carrego dinamicamente os milliseconds ele ja fia inicializado

private static final long milliseconds = 10000 * 60;

Enquanto a aplicação esta aberta tudo funciona normalmente, quando ela é fechada gera um erro... alguma dica?

Obrigado

6 respostas

Olá Mauricio,

De acordo com a documentação não tem nenhuma restrição na passagem desse parâmetro. De qualquer maneira, se isso está afetando o comportamento da aplicação é interessante descobrir a causa. Posta aqui a stack trace do erro prá gente tentar descobrir o que pode estar acontecendo.

Esse erro acontece apenas após finalizar a aplicação.

Tem como capturar um erro quando ele acontece após a aplicação fechar?

Tem sim Mauricio, verifique a saída do console dentro do próprio Android Studio. Geralmente quando aparece aquele janela de "A aplicação XYZ parou..." a stack trace da exception é impressa no próprio console.

Faz o teste por aí e quando encontrar a mensagem posta ela aqui pra gente continuar.

o erro que obtive foi o seguinte

java.lang.RuntimeException: Unable to create service br.com.almmati.services.GetLocation: java.lang.NullPointerException
                                                                    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2373)
                                                                    at android.app.ActivityThread.access$1600(ActivityThread.java:130)
                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                    at android.os.Looper.loop(Looper.java:137)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:4745)
                                                                    at java.lang.reflect.Method.invokeNative(Native Method)
                                                                    at java.lang.reflect.Method.invoke(Method.java:511)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                                                                    at dalvik.system.NativeStart.main(Native Method)
                                                                 Caused by: java.lang.NullPointerException

isso aconteceu executando o código

String sql = "SELECT * FROM empresa;";
        SQLiteDatabase db = null;
        try {
            db = Conexao.getDatabase();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Cursor c = db.rawQuery(sql, null); //nessa linha

mas acredito que meu problema esteja aqui db = Conexao.getDatabase();

public static SQLiteDatabase getDatabase() throws Exception {
    if (database == null) {
        // if (!new File(ControleSistema.getDiretorioempresa() +
        // "/empresa.db").exists()) {
        // throw new Erro(105);
        // }

        File databaseDir = new File(ControleSistema.getDiretorioempresa());
        if (!databaseDir.exists()) {
        databaseDir.mkdir();
        }

        if (new File(ControleSistema.getDiretorioempresa() + "/empresa.db").exists()) {
        try {
            database = SQLiteDatabase.openDatabase(ControleSistema.getDiretorioempresa() + "/empresa.db", null, 0);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Erro(108);
        }
        } else {
        database = SQLiteDatabase.openOrCreateDatabase(ControleSistema.getDiretorioempresa() + "/empresa.db", null);
        }

        database.execSQL("PRAGMA foreign_keys = ON; PRAGMA ignore_check_constraints = OFF; PRAGMA case_sensitive_like = false; PRAGMA synchronous = normal; PRAGMA temp_store = default; PRAGMA journal_mode = wal; PRAGMA auto_vacuum = full;");
        // database.execSQL("PRAGMA foreign_keys=ON; PRAGMA case_sensitive_like = false; PRAGMA synchronous = normal; PRAGMA journal_mode = wal; PRAGMA auto_vacuum = full; ");
        database.setLockingEnabled(false);
    }
    return database;
    }

com o arquivo grande-wrapper.properties configurado assim:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

estou bem perdido no momento :(

Olá Mauricio,

Esse código que você está executando está dentro de um service? Se sim, posta aqui também o código dele.

Outra coisa, acho que está faltando um pedaço da stack trace pois nesse pedaço não tem nenhum referência indicando que o erro está acontecendo na abertura do banco de dados.

Se possível, fala um pouco sobre o fluxo que a sua aplicação está executando pra gente tentar ter uma ideia do que pode estar acontecendo.

solução!

Eu consegui encontrar o problema. Tinha um objeto que era carregado ao iniciar a aplicação e que eu usava no serviço, e que durante a execução do serviço ele ficava nulo gerando o erro.

Obrigado pelo auxilio