>
Eu até vi um tópico a respeito do mesmo problema, mas o tópico foi fechado e não consegui resolver a questão. Copiei o código certinho do jeito da aula, mas ao tentar salvar a venda o programa apresenta um erro. Segue o log do erro:
06-06 20:02:21.566: I/ActivityManager(27440): Timeline: Activity_idle id: android.os.BinderProxy@447ef238 time:9076596
06-06 20:02:43.618: I/ActivityManager(27440): Timeline: Activity_launch_request id:br.com.uau.vendas time:9098648
06-06 20:02:43.908: I/ActivityManager(27440): Timeline: Activity_idle id: android.os.BinderProxy@44844c90 time:9098930
06-06 20:02:48.362: D/AndroidRuntime(27440): Shutting down VM
06-06 20:02:48.362: W/dalvikvm(27440): threadid=1: thread exiting with uncaught exception (group=0x4165cd88)
06-06 20:02:48.372: E/AndroidRuntime(27440): FATAL EXCEPTION: main
06-06 20:02:48.372: E/AndroidRuntime(27440): Process: br.com.uau.vendas, PID: 27440
06-06 20:02:48.372: E/AndroidRuntime(27440): java.lang.IllegalStateException: Could not execute method of the activity
06-06 20:02:48.372: E/AndroidRuntime(27440): at android.view.View$1.onClick(View.java:3954)
06-06 20:02:48.372: E/AndroidRuntime(27440): at android.view.View.performClick(View.java:4569)
06-06 20:02:48.372: E/AndroidRuntime(27440): at android.view.View$PerformClick.run(View.java:18553)
06-06 20:02:48.372: E/AndroidRuntime(27440): at android.os.Handler.handleCallback(Handler.java:733)
06-06 20:02:48.372: E/AndroidRuntime(27440): at android.os.Handler.dispatchMessage(Handler.java:95)
06-06 20:02:48.372: E/AndroidRuntime(27440): at android.os.Looper.loop(Looper.java:212)
06-06 20:02:48.372: E/AndroidRuntime(27440): at android.app.ActivityThread.main(ActivityThread.java:5151)
06-06 20:02:48.372: E/AndroidRuntime(27440): at java.lang.reflect.Method.invokeNative(Native Method)
06-06 20:02:48.372: E/AndroidRuntime(27440): at java.lang.reflect.Method.invoke(Method.java:515)
06-06 20:02:48.372: E/AndroidRuntime(27440): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
06-06 20:02:48.372: E/AndroidRuntime(27440): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
06-06 20:02:48.372: E/AndroidRuntime(27440): at dalvik.system.NativeStart.main(Native Method)
06-06 20:02:48.372: E/AndroidRuntime(27440): Caused by: java.lang.reflect.InvocationTargetException
06-06 20:02:48.372: E/AndroidRuntime(27440): at java.lang.reflect.Method.invokeNative(Native Method)
06-06 20:02:48.372: E/AndroidRuntime(27440): at java.lang.reflect.Method.invoke(Method.java:515)
06-06 20:02:48.372: E/AndroidRuntime(27440): at android.view.View$1.onClick(View.java:3949)
06-06 20:02:48.372: E/AndroidRuntime(27440): ... 11 more
06-06 20:02:48.372: E/AndroidRuntime(27440): Caused by: java.lang.NullPointerException
06-06 20:02:48.372: E/AndroidRuntime(27440): at br.com.uau.vendas.NovaVenda.Salvar_Click(NovaVenda.java:51)
06-06 20:02:48.372: E/AndroidRuntime(27440): ... 14 more
06-06 20:02:51.576: I/Process(27440): Sending signal. PID: 27440 SIG: 9
06-06 20:02:52.126: I/ActivityManager(31278): Timeline: Activity_idle id: android.os.BinderProxy@447efb28 time:9107150
ola Francisco
mostre o seu codigo .java
o xml
e o android manifest
Andre, eu consegui resolver assistindo a última aula. Porém, a título de aprendizado, eu gostaria de obter a localização através do getBestProvider (e utilizar a internet, quando possível). Mas não estou conseguindo de forma alguma. Já tentei inclusive modificar a String provider de "gps" para "network". Todas as permissões estão ok, mas simplesmente não funciona. Me ajuda!!!! rs rs
Teoricamente este código deveria funcionar, certo?
package br.com.uau.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.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class NovaVenda extends Activity implements LocationListener{
private double la;
private double lo;
LocationManager lm = null;
ProgressDialog pgd = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nova_venda);
Spinner spProdutos = (Spinner) findViewById(R.id.spProdutos);
SQLiteDatabase db = openOrCreateDatabase("vendas.db", Context.MODE_PRIVATE, null);
Cursor cursor = db.rawQuery("SELECT * FROM produtos ORDER BY nome ASC", null);
String[] from = {"_id", "nome", "preco"};
int[] to = {R.id.txvId, R.id.txvNome, R.id.txvPreco};
SimpleCursorAdapter ad = new SimpleCursorAdapter(getBaseContext(), R.layout.spinner, cursor, from, to);
spProdutos.setAdapter(ad);
db.close();
}
public void Salvar_Click (View view){
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//String provider = "gps";
Criteria criteria = new Criteria();
String provider = lm.getBestProvider(criteria, true);
lm.requestLocationUpdates(provider, 4000, 0, this);
pgd = ProgressDialog.show(NovaVenda.this, "Aguarde...", "Buscando Localização!!!", true, false, null);
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
pgd.dismiss();
la = location.getLatitude();
lo = location.getLongitude();
SQLiteDatabase db = openOrCreateDatabase("vendas.db", Context.MODE_PRIVATE, null);
Spinner spProdutos = (Spinner) findViewById(R.id.spProdutos);
SQLiteCursor dados = (SQLiteCursor)spProdutos.getAdapter().getItem(spProdutos.getSelectedItemPosition());
ContentValues ctv = new ContentValues();
ctv.put("produto", dados.getInt(0));
ctv.put("preco", dados.getDouble(2));
ctv.put("la", la);
ctv.put("lo", lo);
db.insert("vendas", "_id", ctv);
lm.removeUpdates(this);
finish();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
Toast.makeText(getBaseContext(), "Por favor ligar o GPS", Toast.LENGTH_SHORT).show();
}
}
Ola Francisco
tira o null do locationmanager
LocationManager lm;
Andre, funcionar funciona, mas se desligar o GPS ele não busca a localização através do network de forma alguma. Gostaria de poder utilizar as duas formas pois em alguns momentos utilizar o GPS fica impraticável (como em estacionamentos, dentro de prédios, etc), demora muito para sincronizar.
Francisco
Veja a última aula de GPS do curso.
Já assisti. Conforme falei acima, consegui executar o exemplo demonstrado pelo professor.
Minha dúvida é: de acordo com o código acima (que funciona), o celular deveria buscar a localização através do GPS ou da rede correto (getBestProvider)??? PRECISO DE UM CÓDIGO QUE BUSQUE A LOCALIZAÇÃO ATRAVÉS DA INTERNET TAMBÉM, NÃO SÓ ATRAVÉS DO GPS.
Implementei o seguinte código, diferente do ensinado pelo professor, que também FUNCIONA, mas apenas com o GPS ligado, não busca a localização através da rede, coisa que eu creio que deveria acontecer. Segue o código:
public void Salvar_Click (View view){
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = lm.getBestProvider(criteria, true);
lm.requestLocationUpdates(provider, 4000, 0, this);
pgd = ProgressDialog.show(NovaVenda.this, "Aguarde...", "Buscando Localização!!!", true, false, null);
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
pgd.dismiss();
la = location.getLatitude();
lo = location.getLongitude();
SQLiteDatabase db = openOrCreateDatabase("vendas.db", Context.MODE_PRIVATE, null);
Spinner spProdutos = (Spinner) findViewById(R.id.spProdutos);
SQLiteCursor dados = (SQLiteCursor)spProdutos.getAdapter().getItem(spProdutos.getSelectedItemPosition());
ContentValues ctv = new ContentValues();
ctv.put("produto", dados.getInt(0));
ctv.put("preco", dados.getDouble(2));
ctv.put("la", la);
ctv.put("lo", lo);
db.insert("vendas", "_id", ctv);
lm.removeUpdates(this);
finish();
}
Pode me ajudar?
Olá
Em vez de getBestProvider coloque como string network
String provider = "network";
É somo eu disse acima, eu já fiz essa tentativa e não funcionou.
Ola Francisco
veja este topico aqui
http://rlsystem.com.br/forum/android/715-erro-com-location#top
Show de bola, obrigado André. Funcionou sim, bastou mudar as configurações do celular! (optar pela opção menos precisa, usando wifi e rede)