>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



Erro ao tentar pegar latitude e longitude


Estou com um erro ao tentar pegar latitude e longitude. Já fiz tudo certinho como tem no video.


public class NovaVendaActivity extends Activity implements LocationListener{//gps

private String locationProvider = LocationManager.NETWORK_PROVIDER;


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nova_venda);

Spinner spProduto = (Spinner)findViewById(R.id.spProduto);
SQLiteDatabase db= openOrCreateDatabase("vendas.db",Context.MODE_PRIVATE,null);

Cursor cursor = db.rawQuery("SELECT * FROM produtos ORDER BY nome ASC",null);//resultset
String[] from = {"_id", "nome", "preco"};//colunas
int[] to = {R.id.txvId,R.id.txvNome,R.id.txvPreco};//vai pra esse

SimpleCursorAdapter sca = new SimpleCursorAdapter(getBaseContext(),R.layout.spinner,cursor,from,to);//passa os parametros
spProduto.setAdapter(sca);//carrega os produtos


db.close();
}
public void Salvar_click(View view){
//gps
LocationManager locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();//tipos de provider especifico
String provider=locationManager.getBestProvider(criteria,false);//melhor provider
Location local = locationManager.getLastKnownLocation(provider);//pega a ultima localizacao

//la=local.getLatitude();
//lo=local.getLongitude();//So precisa da localizacao no momento q clicar no butao
//abre banco
SQLiteDatabase db= openOrCreateDatabase("vendas.db",Context.MODE_PRIVATE,null);

Spinner spProduto = (Spinner)findViewById(R.id.spProduto);

SQLiteCursor dados=(SQLiteCursor)spProduto.getAdapter().getItem(spProduto.getSelectedItemPosition());//pega item selecionado

ContentValues ctv = new ContentValues();//inserir no banco
ctv.put("produto", dados.getInt(0));
ctv.put("preco", dados.getDouble(2));
ctv.put("la", local.getLatitude());
ctv.put("lo", local.getLongitude());


db.insert("vendas", "_id", ctv);//nome da tabela, vlr nulo e de onde vem dados

}

O erro está ocorrendo bem no momento em que tento inserir a latitude e a longitude no sqlite. Se puderem ajudar .



17 Respostas


Ele carrega e salva normalmente os dados no spinner. O único problema mesmo é o método do botão salvar, no momento em que ele tenta pegar a latitude e longitude. A permissão ACCESS_FINE_LOCATION já foi dada também no manifest daí não sei onde tá o erro..




ola Rodrigo,

bota um logcat no ctv p gente ver qual erro ta dando

e coloca aki no site ...




http://rlsystem.com.br/forum/disco/uploads/7981b849507bfeae083afa2e827d7789-logcat.png






Rodrigo

Assista a aula de GPS, a última do curso.

Provavelmente está retornando NULL sua localização.

Nesta aula é explicado o porque.




Obrigado pelo feedback. Fiz o teste no emulador aqui e a barra de progresso não para. Acredito que não está chegando no método onLocationChanged. É pra ser assim mesmo, ou esse ex também funciona no emulador (estou usando a versão 4 da api do google).




Fiz o teste no celular e continuou com o mesmo erro. Não tá entrando no método onLocationChanged, setei 3s e nda. O que pode ser?




ola Rodrigo


tenta ver esse post aki

http://rlsystem.com.br/forum/android/530-erro-ao-mostrar-localizacao-no-mapa#top

e faz o teste no celular ..... com o gps ligado...

:)




O problema é que continua não pegando as coordenadas do gps. Já fiz da forma como está na ultima aula de gps, povoando os dados no método onLocationChanged e não resolveu ainda




Também estou com esse problema, debugando o código, o retorno de "location" esta vindo nulo, como o Rafael falou, assistindo a ultima aula tem a explicação então, como estou no inicio vou esperar e quando chegar lá vejo a causa do erro


Location location = locationManager.getLastKnownLocation(provider);




Rodrigo

Está forçando ele para fazer um request nas posições? Usando o método updates dele?

Poste seu código novo como ele ficou.




Rafael,

Pode assistir ela sempre problemas, mesmo sendo a última. Depois você continua as outras.





package br.com.example.vendas;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteCursor;
import android.database.sqlite.SQLiteDatabase;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;

public class NovaVendaActivity extends Activity implements LocationListener{//gps

LocationManager lm=null;
ProgressDialog pgd =null;
// private String locationProvider = LocationManager.NETWORK_PROVIDER;


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nova_venda);

Spinner spProduto = (Spinner)findViewById(R.id.spProduto);
SQLiteDatabase db= openOrCreateDatabase("vendas.db",Context.MODE_PRIVATE,null);

Cursor cursor = db.rawQuery("SELECT * FROM produtos ORDER BY nome ASC",null);//resultset
String[] from = {"_id", "nome", "preco"};//colunas
int[] to = {R.id.txvId,R.id.txvNome,R.id.txvPreco};//vai pra esse

SimpleCursorAdapter sca = new SimpleCursorAdapter(getBaseContext(),R.layout.spinner,cursor,from,to);//passa os parametros
spProduto.setAdapter(sca);//carrega os produtos


db.close();
}
public void Salvar_click(View view){
lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
String provider ="gps";
lm.requestLocationUpdates(provider, 4000, 0, this);//atualiza a cada 3s
//pgd=ProgressDialog.show(NovaVendaActivity.this,"Aguarde ...","Buscando Localização",true,false);

//cai no onLocationChanged


// Criteria criteria = new Criteria();//tipos de provider especifico
//String provider=lm.getBestProvider(criteria,false);//melhor provider
//Location local = locationManager.getLastKnownLocation(provider);//pega a ultima localizacao

// la=local.getLatitude();
//lo=local.getLongitude();//So precisa da localizacao no momento q clicar no butao
//abre banco


}
@Override
public void onLocationChanged(Location location) {
pgd.dismiss();//parar barra de progresso
SQLiteDatabase db= openOrCreateDatabase("vendas.db",Context.MODE_PRIVATE,null);
//
Spinner spProduto = (Spinner)findViewById(R.id.spProduto);

SQLiteCursor dados=(SQLiteCursor)spProduto.getAdapter().getItem(spProduto.getSelectedItemPosition());//pega item selecionado

ContentValues ctv = new ContentValues();//inserir no banco
ctv.put("produto", dados.getInt(0));
ctv.put("preco", dados.getDouble(2));
ctv.put("la", location.getLatitude());
ctv.put("lo", location.getLongitude());

db.insert("vendas", "_id", ctv);//nome da tabela, vlr nulo e de onde vem dados
lm.removeUpdates(this);//cancela dps de atualizar
//recuperar apenas uma vez
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub

}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub

}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub

}

}



Criei outro projeto e fiz também de igual forma como esta na video aula e não deu certo




Rodrigo

Joga no Log.d o valor da latitulde, ve o que ele retorna lá.

Ali dentro do método que onLocationChanged




fsadfsadfasdfasdfsafdfasfasdf




Apesar do post ser antigo estou tendo o mesmo problema. Alguem tem a solução?

Aparentemente o problema esta quando passa o provider como parametro no método requestLocationUpdates:

O Provider está retornando null e nem chega entrar no update:

10-16 15:59:36.150 5899-5899/br.com.rodrigo.exemplogps E/AndroidRuntime: Caused by: java.lang.IllegalArgumentException: invalid provider: null

Já tentei passar o provider como "gps" e tambem não funcionou.

Caused by: java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission.

A permissao foi dada dentro do manifest:


[XML]

package="br.com.rodrigo.exemplogps" >



android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
android:name=".TelaInicial"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" >










[/XML]

Alguma luz?




Mas so ta dando esse erro??