Mostrando postagens com marcador Errata. Mostrar todas as postagens
Mostrando postagens com marcador Errata. Mostrar todas as postagens

sexta-feira, 30 de janeiro de 2015

Dominando o Android: Atualização 2

Olá povo,

Em atenção as pessoas que compraram meu livro, estou reportando os erros que o pessoal está encontrando. Sendo assim, segue abaixo mais algumas atualizações sobre o livro. Quem quiser acompanhar e reportar erratas pode participar do grupo de discussão sobre o livro.

Capítulo 1

Página 43. A pasta values-v11-mcc724-mnc31 informada não funcionaria pois teria que ser respeitada a ordem de avaliação dos recursos. O nome correto seria values-mcc724-mnc31-v11.
Obrigado Douglas Drumond!

Página 46. A propriedade densityDpi da classe Configuration só está disponível na API Level 17 (Android 4.2). E as propriedades screenHeightDp e screenWidthDp na API Level 13 (Android 3.2). Uma alternativa para obter esses valores é utilizar a classe DisplayMetrics.
Obrigado Tatiani Lima!

Capítulo 4

Página 113: No lugar de setEditorActionListener(OnEditorActionListener), usar setOnEditorActionListener(OnEditorActionListener).
Valeu Jorge Felipe (por essa e outras).

Página 134. Na seção "Cabeçalho e Rodapé", no lugar de setListAdapter(Adapter) lê-se listView.setAdapter(Adapter).

Página 136: Na seção "EmptyView", quando fui fazer esse exemplo, ele era inicialmente com uma ListActivity.
public class MainActivity extends ListActivity {
  ...
  public void onCreate(Bundle savedInstanceState){
    setContentView(R.layout.activity_main);
    listView = getListView();
    ...
  }
  ...
}
Com isso, o exemplo funciona corretamente, porque internamente a classe ListActivity define a propriedade emptyView da ListView. Entretanto, no Lollipop, por padrão, a  ListActivity não exibe a ActionBar (barra de título da parte superior), então resolvi herdar de ActionBarActivity. E com isso, esqueci de adicionar a seguinte linha:
listView.setEmptyView(findViewById(android.R.id.empty));

Essa correção já está disponível no GitHub.
Obrigado Vitor Albuquerque!

Capítulo 5

Página 155: No segundo parágrafo, no lugar de android:text, seria android:textColor.

Página 159: Remover propriedade android:background dos botões, uma vez que ela foi definida no arquivos values/styles.xml.

Capítulo 6

Página 195: No único parágrafo, no lugar de equipe, seria hotel.

Geral

Em vários exemplos estou utilizando o valor fill_parent ao invés do match_parent. Entretanto o segundo é o recomendado desde a API Level 8 (Android 2.2). Mas se você observar, o valor das constantes internamente é o mesmo. Então na prática, não faz diferença nenhuma, ele só foi renomeado. Mas, por precaução, utilize match_parent.

--

Bem pessoal! Por enquanto é isso. Desculpem o transtorno, mas é que não houve revisão técnica pois encareceria o livro. Essa incubência ficou para vocês e eu agradeço bastante essa colaboração.

À medida que forem achando alguma coisa, por gentileza reportem no grupo. Vai ajudar a mim e a outros leitores.

4br4ç05,
nglauber

terça-feira, 13 de janeiro de 2015

Dominando o Android - Atualização 1 - Capítulo 14

Olá pessoal,

Acho que com o livro as atualizações aqui do blog ficarão mais frequentes. Pelo menos é o que eu espero. Vou fazer o possível para colocar as correções/atualizações aqui através de mini-posts falando rapidamente sobre a mudança e o por quê.

Para quem não sabe, o código-fonte dos exemplos do livro estão disponíveis no meu gitHub (https://github.com/nglauber/dominando_android). E lá vocês vão ver dois branchs master e master_updates. O código que estiver com algum bug, eu vou corrigir e colocar no branch master e o que for atualização ficará no branch master_updates.
Também criei um grupo de discussão (http://groups.google.com.br/d/forum/livro-dominando-o-android) que todos podem se inscrever.

Recebi hoje uma avaliação do livro que informava que o mesmo "tinha uma falha grave" e "estava desatualizado" porque eu não estou utilizando API do Google Play Services 6.5. E que uma classe (a LocationClient) que eu usava no exemplo não existia.

Não sei se todos sabem, mas o processo de finalização de um livro requer algumas etapas que demandam tempo: revisão ortográfica, diagramação, checar figuras, referências, tempo de impressão na gráfica, etc.  A versão 6.5 do Google Play Services foi anunciada no dia 17/11/2014, mas só foi disponibilizada para os desenvolvedores dia 08/12/2014. Época que o livro já estava com a editora em processo de finalização e impressão. Sendo assim, não pude atualizar o capítulo 14 (Mapas e Localização) a tempo. Sendo assim, peço desculpas pelo meu livro ter ficado desatualizado, por conta de alguns dias... :(
Mas quero reiterar que o código apresentado no livro funciona perfeitamente do jeito que ele se encontra.

--

Pedido de desculpas feito, vamos ao que mudou! As alterações feitas em relação ao exemplo do livro estão nesse commit aqui no branch master_updates, uma vez que é uma atualização da nova API e não uma correção de um erro do livro.

Conforme o comentário do leitor, a classe com.google.android.gms.location.LocationClient não existe mais. Mas seus métodos foram distribuídos em outras classes.
  • Na classe GeofenceReceiver, os eventos de Geofence podem ser tratados com a classe GeofencingEvent.
  • Na classe MainActivity, muito do que era feito com a LocationClient passou a ser responsabilidade da GoogleApiClient, inclusive os eventos de conexão (ConnectionCallbacks e OnConnectionFailedListener).
  • Ainda na MainActivity para obter a localização atual passamos a utilizar a classe LocationServices.FusedLocationApi. Bem como para requisitar atualizações sobre mudança na localização.
  • E finalmente, para adicionar um Geofence, usamos a classe LocationServices.GeofencingApi.
Isso é um resumo pessoal. Quem quiser mais informações sobre essa nova API, recomendo esses links:



Qualquer dúvida, sugestão ou crítica serão muito bem-vindas.

4br4ç05,
nglauber