>
Pessoal,
Quando em clico em um item do "Listar Vendas", o mapa aparece em branco. Já pesquisei bastante e tentei várias coisas, sem sucesso. Inclusive vi que é um problema bem comum.
nullnullO que ja fiz/tentei:
- No Goggle Apis Console, ativei o serviço "Google Maps API v3"
- Gerei chaves debug e release, utilizando o certificado SHA1
- Coloquei os uses-permission de ACCESS_FINE_LOCATION; INTERNET e READ_GSERVICES no Manifest
- Coloquei o uses-library do Maps no Manifest
nullnullSegue meu código:
nullnulllistar_vendas_activity.xml
[XML]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ListarVendasActivity" >
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
[/XML]
*************************************
mapa.xml
[XML]
android:layout_height="match_parent"
android:orientation="vertical" >
android:enabled="true"
android:clickable="true"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="AIzaSyDSJVGKZGCP7mRWo7gIVkXYvcJsLz1hvT0"
/>
[/XML]
*************************************
MapShowActivity.java
package br.com.vinnamaral.vendas;
import android.content.Intent;
import android.os.Bundle;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
public class MapShowActivity extends MapActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapa);
MapView map = (MapView)findViewById(R.id.mapa_view);
map.setBuiltInZoomControls(true);
map.displayZoomControls(true);
Intent it = getIntent();
int latitude = (int)(it.getDoubleExtra("latitude", 0)*1E6);
int longitude = (int)(it.getDoubleExtra("longitude", 0)*1E6);
MapController mc = map.getController();
mc.animateTo(new GeoPoint(latitude, longitude));
mc.setZoom(30);
map.invalidate();
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
package br.com.vinnamaral.vendas;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteCursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class ListarVendasActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listar_vendas_activity);
SQLiteDatabase db = openOrCreateDatabase("vendas.db", Context.MODE_PRIVATE, null);
ListView ltwVendas = (ListView)findViewById(R.id.ltwVendas);
Cursor c = db.rawQuery("SELECT vendas._id, vendas.preco, vendas.la, vendas.lo, produtos.nome FROM vendas INNER JOIN produtos on produtos._id = vendas.produto", null);
String[] from = {"_id", "preco", "nome", "la", "lo"};
int[] to = {R.id.txvID_listar, R.id.txvPreco_listar, R.id.txvNome_listar, R.id.txvLatitude_listar, R.id.txvLongitude_listar};
SimpleCursorAdapter ad = new SimpleCursorAdapter(getBaseContext(), R.layout.listar_vendas_model, c, from, to);
ltwVendas.setAdapter(ad);
ltwVendas.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> ad, View v, int position, long id) {
SQLiteCursor c = (SQLiteCursor)ad.getAdapter().getItem(position);
Intent it = new Intent(getBaseContext(), MapShowActivity.class);
it.putExtra("latitude", c.getDouble(c.getColumnIndex("la")));
it.putExtra("longitude", c.getDouble(c.getColumnIndex("lo")));
startActivity(it);
}
});
db.close();
}
}
Tentei editar o tópico mas não achei a opção.
Esqueci de comentar que todos os meus testes é feito direto no celular, um Galaxy S3, com internet, GPS e localização ativados.
Vinicius
Peço que assista a vídeo nova de Maps que tem no curso, ela é quase a última.
Nela é mostrada o novo GMaps. Por isso pode acontecer o erro citado por você.
Olá Rafael,
Assisti a vídeo aula 10, conforme você me orientou.
Criei o projeto ExemploMaps, seguindo todos os passos descritos.
Porém, ao tentar executar no meu celular (Galaxy S3), a aplicação para e fecha. Ao ver o log, encontrei isso "Could not find google-play-services_lib.apk"
Cliquei com o botão direito em cima do projeto e fui em Properties > Android e vi que a library do google-play-services estava com um "x" de erro. Percebi que o erro era porque ele tava invertendo as barras do caminho (C:\Development\adt-bundle...etc). Removi e adicionei novamente, e ele adicionou correto (C:/Development/adt-bundle...etc). Cliquei em "apply" e dei um "ok". Porém, quando eu volto para checar se esta correto, novamente a barra ta invertida e tem um "x" de erro. Será que é isso que tá ocasionando o "Could not find google-play-services_lib.apk"??
Como eu poderia resolver?
Eu consegui fazer funcionar o exercicio de exemplo da Aula 10. Basicamente, quando eu importei o google-play-services, tem que deixar checado a opção "create into workspace". Usei o capítulo de Google Maps do livro Google Android do Lecheta para descobrir isso.
Com o exemplo da vídeo-aula 10 funcionando, exportei tudo que eu havia feito no projeto Vendas para este projeto e agora tudo esta funcionando.
Com uma ressalva, não é mais necessário multiplicar por 1E6 a longitude e latitude.
A clase MapShowActivity ficou bem mais enxuta e simples
package au.com.vinnamaral.vendas;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import au.com.vinnamaral.vendas.R;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MapShowActivity extends FragmentActivity {
private GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapa);
map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
Intent it = getIntent();
LatLng location = new LatLng(it.getDoubleExtra("latitude", 0), it.getDoubleExtra("longitude", 0));
map.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 20));
map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
}
}
Opa
Ótimo.
Exato, na aula 10, inclusive o exemplo já não tem mais a multiplicação nas coordenadas.