>
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
}
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
}
}
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]
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" >
[/XML]
Alguma luz?
Mas so ta dando esse erro??