Páginas

segunda-feira, 25 de agosto de 2014

[Android] Upgrade na versão do Database sem perder dados

Olá pessoal!

Aí vai mais uma dica simples, porém apesar de parecer simples estive com o mesmo problema e quando procurei pela solução não encontrei. Percebi que bastante gente também tem essa dúvida, pois encontrei várias perguntas similares no stackoverflow porém todas sem resultados de sucesso.

Então vamos lá, o cenário é o seguinte:

- Você utiliza um database interno no seu App, utilizando o famoso SQLite.
- Você precisa atualizar a versão desse DB para incluir mais registros, ou seja, aumentar o conteúdo do seu App. Porém, você tem uma lista de Favoritos por exemplo, que é alimentada de acordo com o uso de cada usuário.

Problema: ao alterar a versão do DB, a sua classe que estende SQLiteOpenHelper, vai chamar o método onUpgrade para atualizar a versão do DB que já está instalado pela versão anterior do App, e Bye Bye os itens que o usuário marcou como favorito =(

Como disse anteriormente, procurei por várias soluções e não encontrei, fiz várias implementações porém nenhuma fazia o que eu queria que fizesse.

Então a solução que encontrei foi a seguinte:

Na minha MainActivity, ou seja, a primeira tela que inicia com o App, eu criei dois métodos:

pegaVersaoDb(); //busca o valor da versão do DB que está atualmente em funcionamento.
e
atualizaVersaoDb(); //atualiza o DB atual pelo DB da nova versão.

Também utilizei a variável DATABASE_VERSION que geralmente é utilizada no método onUpgrade e é declarada na classe que estende SQLiteOpenHelper.

Ok, tudo pronto para atualizarmos o DB, mas antes queremos salvar os favoritos para que quando acabe de atualizar a versão do App, os favoritos continuem do jeito que estavam.
Então para um melhor entendimento do que foi feito, e para auxiliar à quem procura uma solução, vou colar os códigos e explicar:

// pegaVersaoDb(); busca o valor da versão do DB que está atualmente em funcionamento.

public void pegaVersaoDb(){

 Cursor cursor = databaseFav.query(TABLE_VERSION, new String[] {KEY_VERSAO},null, null, null, null, null);
if (cursor.moveToFirst()) {
 do {      
     versao_atual = cursor.getInt(0);
      } while (cursor.moveToNext());
     }
if (cursor != null && !cursor.isClosed()) {
  cursor.close();
  }
}


// pegaMusicasFavoritas(); retorna um Cursor com todos os itens marcados como favoritos no DB.

public static Cursor pegaMusicasFavoritas() {

  Cursor favCursor = databaseFav.query(true, TABLE_NAME, new String[] 
{KEY_ID_ITEM, KEY_NOME, KEY_ITEM_ID, KEY_VALOR }, KEY_FAVORITO + "=?",
 new String[] { VALOR_FAVORITO }, null, null, null, null);

if (favCursor != null) {
favCursor.moveToFirst();
}
 return favCursor;
}


// atualizaVersaoDb(); atualiza o DB atual pelo DB da nova versão.

public void atualizaVersaoDb(SQLiteDatabase db, int versaoAtual, int novaVersao){
    try {
     if(versaoAtual == novaVersao){
         Log.d("atualizarVersaoDb", "Nao e necessario atualizar, versao mais nova ja instalada.");
     }
     if(versaoAtual < novaVersao){
         Log.d("CursorSalvaFav", "O método foi acionado e os favoritos será carregado...");
     Cursor cursorSalvaFav = pegaMusicasFavoritas();
     Log.d("CursorSalvaFav", "Favoritos carregados no cursor");
     Log.d("CursorSalvaFav", "Número de favoritos: " + cursorSalvaFav.getCount());
    
     dbOpenHelper.copyDataBase();
    
     if(cursorSalvaFav.getCount() == 0){
         Log.d("CursorSalvaFav", "Não há nenhum item marcado como favorito!");
     } else {
    
       do {
         Log.d("CursorSalvaFav", "Tem favoritos!");
    
     String nome_item = cursorSalvaFav.getString(0);
     String id_item = cursorSalvaFav.getString(2);
     ContentValues values = new ContentValues();
     values.put(KEY_FAVORITO, 1);
     Log.d("CursorSalvaFav", "inseriu o valor 1 no fav");
     databaseFav.update(TABLE_NAME, values, KEY_ID_ITEM + "=?" + " AND " +  KEY_ITEM_ID + "=?", new String[] { nome_item, id_item });
     Log.d("CursorSalvaFav", "Realizou update!");
       } while (cursorSalvaFav.moveToNext());
     }
    }
 } catch (IOException mIOException) {
Log.e("OnUpgrade", mIOException.toString());
 }
}


Agora vamos entender tudo o que foi feito na ordem como é executada as coisas dentro do método onCreate:

//iniciei meu DB na variável dbOpenHelper 
dbOpenHelper = new ExternalDbOpenHelper(getActivity(),DB_NAME);

//armazenei a versão do NOVO DB na variável nova_versao, o valor dessa versão é o mesmo valor que está no DB que você atualizou para lançar a nova versão (exemplo: se o DB antigo era versão 1, o valor da nova versão poderá ser 2)
nova_versao = dbOpenHelper.DATABASE_VERSION;

//armazeno o meu DB na variável databaseFav
databaseFav = dbOpenHelper.openDataBase();

//chamo o método que me traz a versão do meu DB que atualmente está sendo utilizado no App
//Aqui está um ponto importante, pois o valor que ele vai pegar aqui ainda não é o valor do DB novo, por exemplo versão 2. O valor ainda é a versão 1, pois o database novo não foi colocado no lugar do antigo, ele apenas está dentro do pacote novo do App (o .apk novo).
pegaVersaoDb();


//Aqui está outro ponto importante, eu chamo o método que decide se será necessário atualizar ou não o DB e se vai ser necessário ou não salvar os favoritos, decisão tomada com base nos valores que estou passando para ele
atualizaVersaoDb(databaseFav, versao_atual, nova_versao);

Como podemos ver no código desse método, ele verifica se a versão do meu DB foi alterada ou não, porque não é em toda versão do App que você vai precisar atualizar seu DB, as vezes você vai lançar uma versão apenas para corrigir um bug ou alguma coisa que não está relacionada ao DB e a versão do DB não será alterada.

Se esse for o caso, o método vai verificar que a versão do DB não foi alterada e apenas vai imprimir no log a seguinte mensagem "Nao e necessario atualizar, versao mais nova ja instalada."

Porém se o DB foi atualizado, ou seja, você modificou os registros dele, alterou a versão dele e alterou a versão da sua variável DATABASE_VERSION, ele vai ver que o código novo que está no novo .apk, está dizendo que a versão do DB é maior do que a versão atual, então o DB deve ser substituído por um novo.... Mas antes, devemos salvar os favoritos do usuário para que eles não sejam apagados.

Então como podemos ver no código, antes de chamar o método copyDataBase()(método responsável por fazer esse processo de substituir o DB por outro), eu chamo o método que salva os favoritos já retornando todos os valores em um cursor Cursor cursorSalvaFav = pegaMusicasFavoritas();

Após isso eu posso já copiar a minha base de dados nova no lugar da antiga e então verificar se tinha algum item marcado como favorito, no caso positivo, eu faço um update no DB novo, mudando o valor default do favorito (zero) para 1, sendo assim marcando os itens como favorito novamente, conforme esse trecho:

do {
         Log.d("CursorSalvaFav", "Tem favoritos!");
    
     String nome_item = cursorSalvaFav.getString(0);
     String id_item = cursorSalvaFav.getString(2);
     ContentValues values = new ContentValues();
     values.put(KEY_FAVORITO, 1);
     Log.d("CursorSalvaFav", "inseriu o valor 1 no fav");
     databaseFav.update(TABLE_NAME, values, KEY_ID_ITEM + "=?" + " AND " +  KEY_ITEM_ID + "=?", new String[] { nome_item, id_item });
     Log.d("CursorSalvaFav", "Realizou update!");
       } while (cursorSalvaFav.moveToNext());
     }
    }
 } catch (IOException mIOException) {
Log.e("OnUpgrade", mIOException.toString());
 }

//Pronto, agora sim posso prosseguir normalmente com a execução do código, pois minha base foi atualizada e os favoritos não foram perdidos, então carrego a lista de favoritos para alimentar minha listView na tela.
cursorFav = pegaMusicasFavoritas();

Agora você me pergunta, porque você não chamou o método pegaMusicasFavoritas(), dentro do método onUpgrade da classe que controla o seu DB? Dessa forma ele iria fazer a mesma coisa, porém com menos código.

Aí eu te respondo, ok por boa prática e como já existe algo pronto que faça essa comparação de versões dos DB's pra gente, o certo realmente seria utilizar o onUpgrade, porém de maneira alguma ele funcionou da forma como eu queria, além do que como ele é algo "pronto", eu não sabia o que ele estava fazendo internamente. Da forma como eu fiz "manualmente" fica fácil de saber o que está acontecendo durante todo o processo, e me deixou com mais confiança de que ele seria executado sempre que necessário.

Gambiarra? Não, isso é solução, para mim essa solução serviu e ainda continua servindo corretamente.
E para você? Foi útil? Deixe sua opinião, sugestão ou dúvida.
Obrigado e até a próxima!
Abraço!




terça-feira, 3 de dezembro de 2013

[Android] YouTube API

Olá Pessoal!

Hoje vou postar um simples tutorial mostrando como utilizar a API do YouTube em seu App. Sim, é isso mesmo, caso você ainda não saiba, o YouTube lançou sua API oficialmente em 10 de Maio de 2013.
Antes eu não havia precisado usar integração com o YouTube nos meus Aplicativos, porém pelo que percebi em algumas pesquisas que eu fiz, que essa integração era muito sofrível de ser feita. Porém agora, essa integração está muito simples de ser feita.

Então, sem mais comentários e vamos aos passos necessários:

1) Você precisa ter a versão 4.2.16 ou mais recente, do App oficial do YouTube. Pois é, o serviço utilizado pela API Android YouTube é distribuído junto com o aplicativo do YouTube real para Android. Apesar da Google não ter separado os dois, não se preocupe pois eles afirmaram que as versões Android 2.2 (Froyo) até as mais recentes receberam atualizações para o App do YouTube através da Play Store.

2) Em seguida, você precisa de uma chave da API. Ela é gratuita, porém você precisa de sua conta do Google para obtê-la.
Acesse esse link:
https://developers.google.com/youtube/android/player/register
E siga os passos corretamente, apesar de parecer confuso, leia com atenção, não tem erro.

OBS: você pode optar por não apresentar o SHA1 Certificado de impressão digital, você pode deixar o campo em branco por enquanto, e mesmo assim a API vai aceitar todas as suas chamadas. Só não se esqueça de restringir ao seu próprio pacote do App antes de liberar qualquer coisa na Play Store.

3) Depois de conseguir a chave da API, vamos abrir o Eclipse e iniciar um novo projeto. Não se esqueça que o projeto deve utilizar no mínimo a versão 2.2 do Android.

4) Antes de continuar com o projeto, você deve fazer download do principal, os arquivos da API :)
Acesse o link e faça o download:
https://developers.google.com/youtube/android/player/downloads/

Descompacte o arquivo zipado






Encontre o arquivo "YouTubeAndroidPlayerApi.jar"









Adicione ele à biblioteca do seu projeto


















5) Agora vamos adicionar ele no Build Path, clique com o botão direito em cima do .jar que acabamos de adicionar, e vá na opção "Build Path > Add to Build Path"









6) Agora precisamos abrir o nosso arquivo "AndroidManifest.xml" e adicionar a permissão de uso da Internet. O arquivo vai ficar assim:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.testeyoutubeapi"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    
     <uses-permission android:name="android.permission.INTERNET"></uses-permission>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.testeyoutubeapi.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

7) Agora precisamos modificar o arquivo de layout "activity_main.xml" que fica em res/layout, e adicionar o Player do YouTube. O arquivo vai ficar assim:

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    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=".MainActivity" >

    <TextView
        android:id="@+id/titulo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Essa é a API do YouTube para Android!" />
    
    <com.google.android.youtube.player.YouTubePlayerView
              android:id="@+id/youtube_view"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_margin="12dip"
              android:layout_below="@+id/titulo"/>

</RelativeLayout>

8) Agora para acessarmos o componente através do nosso código, precisamos estender a classe "YouTubeBaseActivity". Para isso vamos modificar nosso arquivo "MainActivity.java". O arquivo vai ficar assim:

MainActivity.java

package com.example.testeyoutubeapi;

import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayer.Provider;
import com.google.android.youtube.player.YouTubePlayerView;

import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends YouTubeBaseActivity implements
YouTubePlayer.OnInitializedListener {

static private final String DEVELOPER_KEY = "AQUI VAI SUA CHAVE DA API";
static private final String VIDEO = "UhQKol7PFzA";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view);
youTubeView.initialize(DEVELOPER_KEY, this);
}

@Override
public void onInitializationFailure(Provider provider,
YouTubeInitializationResult error) {
Toast.makeText(this, "Ops! Algo deu errado =( " + error.toString(), Toast.LENGTH_LONG)
.show();
}

@Override
public void onInitializationSuccess(Provider provider,
YouTubePlayer player, boolean wasRestored) {
player.loadVideo(VIDEO);
}

}

OBS: Note que a String "static private final String VIDEO = "UhQKol7PFzA";" não contém a URL inteira do vídeo que está no YouTube, contém apenas o final depois do "http://www.youtube.com/watch?v="

http://www.youtube.com/watch?v=UhQKol7PFzA


9) Como você pode ver, o maior trabalho está na configuração, em obter a chave da API, do que na implementação do código.
Agora basta executar e ver o resultado:



DICA: se você seguiu os passos até o fim e executou o projeto com sucesso, percebeu que ao abrir a tela o player do YouTube já inicia a reprodução do vídeo automaticamente. Caso não queira que ele faça isso, basta mudar o método "onInitializationSuccess", mudando a linha:

player.loadVideo(VIDEO);

para

player.cueVideo(VIDEO);

Caso tenha outras dúvidas ou queira saber mais sobre os recursos disponíveis na API, acesse o Java Doc no link

Caso queira baixar o projeto inteiro, acesse o link:
http://www.mediafire.com/download/pnhr7rg2u2p8rkv/TesteYouTubeApi.zip

Bom, é isso pessoal!
Espero que tenha sido útil mais uma vez. Por favor, compartilhem a informação e comentem.
Obrigado e até a próxima.
Abraço!

quarta-feira, 13 de novembro de 2013

[Android] Replace "..." with ellipsis character (…, &&;#8230;) ?

Olá Pessoal!

Hoje venho trazer uma dica. 
Alguma vez você já precisou utilizar caracteres especiais durante o desenvolvimento do seu App ou está precisando agora, e percebeu que ao inserir ele você recebe um Warning certo?

Por exemplo:
Utilizar Reticências (...) para exibir uma informação do tipo: "Pesquisando..."

Basicamente seria fazer isso:
<string name="pesquisando">Pesquisando...</string>

Porém se fizermos isso recebemos o seguinte Warning:

Replace "..." with ellipsis character (…, &&;#8230;) ?





SOLUÇÃO:

<string name="pesquisando">Pesquisando&#8230;</string>




DICA: caso queira inserir outros caracteres especiais, confira a lista de caracteres Unicode
http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
Utilize a coluna "Unicode code point (decimal)" e use o número que está entre parenteses, por exemplo:


hellip…U+2026 (8230)HTML 4.0HTMLsymbolISOpubhorizontal ellipsis (= three dot leader)

por isso devemos usar o número 8230 após o &#



É isso!
Funcionou pra você? Então compartilhe a informação e se preferir deixe seu comentário.

Valeu e até a próxima!

sexta-feira, 8 de novembro de 2013

[Java] Configurando o Ambiente de Desenvolvimento

Olá pessoal!

Bom, hoje vou iniciar com uma postagem sobre um assunto simples porém fundamental, e que para muitas pessoas pode tomar algum tempo ou enfrentar alguns problemas durante o processo.
O que estou falando é do Ambiente de Desenvolvimento, que nada mais é do que o conjunto de softwares que utilizamos para trabalharmos com programação, no nosso caso, Java. 
Vou colocar minhas dicas, links para os softwares e como faço para montar o meu ambiente de desenvolvimento.

O que veremos?

  1. Download e Instalação do JDK
  2. Configuração das variáveis de ambiente
  3. IDE: escolha, download e instalação
  4. Resumo (recomendado para usuário avançado)
  5. Dúvidas básicas referentes à esse post

Sem mais conversa, vamos lá, Hands-on!


  1. Download e Instalação do JDK

O JDK é o início de tudo, sem ele não conseguimos fazer nada. 

Para fazer o download entre em:
http://www.oracle.com/technetwork/pt/java/javase/downloads/index.html
Essa página sempre irá exibir a versão mais recente do JDK (atualmente estamos na 7u45), e para fazer o download basta clicar em Download, como mostra a imagem abaixo




DICA: caso você já sabe que vai trabalhar com a IDE NetBeans, esse processo fica mais fácil. Há uma opção chamada "JDK 7u45 & NetBeans 7.4", esse instalador irá realizar a instalação do NetBeans com o JDK. Portanto se você já sabe que vai optar em utilizar o NetBeans como IDE, pule para a etapa "3. IDE: escolha, download e instalação".

Clicando em Download, será exibida a página para aceitar os termos.



Basta clicar em Accept License Agreement e escolher o link para download de acordo com a Plataforma que você utiliza.
Caso queira ler os termos antes de aceitar (o que eu duvido muito que alguém no mundo faça isso :P ) bastar entrar  em http://www.oracle.com/technetwork/java/javase/terms/license/index.html


Após baixar o JDK, basta realizar a instalação seguindo os passos do instalador. Caso tenha dúvida de como instalar o JDK na plataforma que você utiliza, há esse guia da própria Oracle http://docs.oracle.com/javase/7/docs/webnotes/install/index.html

DICA: é de meu costume durante a instalação, mudar o caminho de instalação. Por padrão ele irá querer instalar na pasta Program Files (Arquivos de Programas) no caso da plataforma ser Windows, porém eu crio uma pasta chamada JavaJDK (ou qualquer nome que desejar), no C:\ e aponto a instalação para ela, e também mudo o nome da pasta de instalação para um nome mais simples como por exemplo jdk7, ficando então C:\JavaJDK\jdk7. Isso porque podemos ter vários JDKs instalados na máquina, podemos utilizar um JDK versão 7 e precisar instalar o JDK versão 6 para trabalhar com alguma aplicação específica, podemos instalar a versão 64bits (x64) porém podemos também precisar instalar versão 32bits (x86) para trabalhar com algo específico para essa arquitetura. Então quando eu preciso fazer isso, instalo tudo na mesma pasta, mudando apenas os diretórios de instalação.
OBS: durante a instalação ele pergunta em qual diretório será instalado o JRE, esse eu não mudo, mudo apenas o diretório de instalação do JDK.


Feita a instalação o próximo passo é definir as Variáveis de Ambiente, os passos são:


2. Configuração das variáveis de ambiente

Windows 8
  1. Arraste o ponteiro do Mouse até o canto inferior Direito da tela
  2. Clique no ícone Pesquisar e digite Painel de Controle
  3. Clique em -> Painel de Controle -> Sistema -> Avançado
  4. Clique em Variáveis de Ambiente, em Variáveis do Sistema, clique em "Novo...", em "Nome da variável" digite JAVA_HOME e em "Valor da variável" coloque o caminho do diretório de instalação do JDK e clique em OK
  5. Ainda em Variáveis do Sistema, localize PATH e clique duas vezes para editar. Em "Valor da variável" vá até o final da linha insira um ; (ponto e virgula) e escreva %JAVA_HOME%\bin
  6. Clique em OK e depois OK, e depois OK.
  7. Abra o CMD (prompt de comandos) e digite java -version
  8. O resultado deve ser algo do tipo

Se o resultado for algo do tipo " 'java' nao é reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes." então houve algum problema durante o processo. Refaça o processo e tente novamente.


Windows 7
  1. Selecione Computador no menu Iniciar
  2. Escolha Propriedades do Sistema no menu de contexto
  3. Clique na guia Definições avançadas do sistema > Avançado
  4. ao 8. igual ao Windows 8
Windows XP
  1. Iniciar -> Painel de Controle -> Sistema -> Avançado
  2. igual do Passo 4. ao 8. do Windows 8
Windows Vista
  1. Clique com o botão direito do mouse no ícone Meu computador
  2. Escolha Propriedades no menu de contexto
  3. Clique na guia Avançado (link Definições avançadas do sistema no Vista)
  4. ao 8. igual ao Windows 8
Caso utilize outros sistemas operacionais, confira o tutorial da própria Oracle http://www.java.com/pt_BR/download/help/path.xml

Caso utilize o Mac OS X o tutorial do Tiago Endres deve lhe ajudar http://www.tiagoek.com.br/?pag=apontando.php

DICA: caso tenham acessado o tutorial da Oracle para setar o PATH do sistema, viu que os passos são um pouco diferentes, isso porque eles sugerem para inserir diretamente no PATH o valor do local que está instalado o JDK. Porém é mais vantajoso criarmos uma variável e depois adicionarmos a variável no PATH, pois como falei, podemos ter várias versões do JDK instalados no nosso computador, e também podemos criar uma variável de ambiente para cada versão. Isso é bom pois quando quisermos ou precisarmos utilizar outra versão do JDK, basta entrarmos nas variáveis de ambiente novamente e mudarmos o nome da qual queremos utilizar para JAVA_HOME, exemplo
Então se fossemos usar o JDK 6 32bits, mudariamos o nome da variável JAVA_HOME para JAVA_HOME7 e mudariamos o nome da variável JAVA_HOME6_32 para JAVA_HOME.

3. IDE: escolha, download e instalação

Agora com o JDK instalado e configurado, precisamos escolher uma IDE (Integrated Development Environment ou Ambiente Integrado de Desenvolvimento).
Vou citar apenas as mais utilizadas, sei que tem outras opções no mercado, mas vou citar apenas as que são mais escolhidas pelos desenvolvedores, são elas:


E então surge todos aqueles comentários e dúvidas: "Qual escolho?", "Me falaram que o Eclipse é melhor que o NetBeans", "O NetBeans é mais fácil de mexer?", entre outras hehe... Falarei sobre isso no item 5. Dúvidas básicas referentes à esse post

Bom, caso você opte por usar o Eclipse basta acessar a sessão de downloads do site http://www.eclipse.org/downloads/ e escolher a versão desejada. Há versões para diversas finalidades, mas geralmente é baixada a primeira opção "Eclipse Standard". O arquivo baixado é um .zip, descompacte a pasta em um local de sua preferência e execute o eclipse.exe. Pronto, ele não é instalável, apenas executável, você já está pronto para desenvolver aplicações em Java utilizando o Eclipse.

DICA: geralmente eu baixo a versão Eclipse IDE for Java EE Developers, porque ela contém tudo o que a versão Standard contém e mais as ferramentas necessárias para trabalhar com o Java EE, o que muda é apenas o tamanho do arquivo, e você já vai ter um ambiente mais completo.

Caso, você opte por usar o NetBeans, basta acessar a sessão de downloads do site https://netbeans.org/downloads/index.html e escolher a versão desejada. O NetBeans também tem versões mais enxutas e mais completas, portanto fica por sua conta. O arquivo baixado é um Instalador, basta executar e seguir os passos da instalação pois é super simples.

DICA: sugiro baixar a versão mais completa do NetBeans, pois como falei logo acima, o que muda é o tamanho do arquivo que é maior, porém você terá um ambiente de desenvolvimento mais completo.

Você pode optar também por fazer o download do NetBeans direto do site da Oracle no momento em que for baixar o JDK. Lembra que disse na dica no início do post, no link http://www.oracle.com/technetwork/pt/java/javase/downloads/index.html tem a opção "JDK 7u45 & NetBeans 7.4", esse instalador irá realizar a instalação do NetBeans com o JDK, o que facilita muito e ganha muito tempo.

4. Resumo

Configurar variável de ambiente, veja o tópico 2. Configuração das variáveis de ambiente e se necessário acesse o link http://www.java.com/pt_BR/download/help/path.xml
Download do Eclipse: http://www.eclipse.org/downloads/

5. Dúvidas básicas referentes à esse post

O que é Hands-on? xD
R: "Hands-on" refere-se, também, à expressão "mão na massa" ou "aprender fazendo".

O que é JRE?
R: Java Runtime Environment (JRE) ou Ambiente de Tempo de Execução Java, é utilizado para executar as aplicações da plataforma Java. É composto por bibliotecas (APIs) e pela Máquina virtual Java (JVM). É o componente básico para rodar alguma aplicação Java, ou seja, é o Java que instalamos nas máquinas do usuários.

Qual diferença entre JDK e SDK?
R: Software Development Kit, ou seja, Kit de Desenvolvimento de Software. SDKs são disponibilizados por empresas ou projetos opensource para que programadores externos tenham uma melhor integração com o software proposto. Um SDK inclui documentação, código e utilitários para que programadores consigam desenvolver as suas aplicações de acordo com um padrão de desenvolvimento para o sistema operativo em questão.

Java Development Kit, ou seja, Kit de Desenvolvimento Java. JDK é fornecido livremente pela Oracle. Constitui um conjunto de programas que engloba compilador, interpretador e utilitários, fornecendo um pacote de ferramentas básicas para o desenvolvimento de aplicações Java.

Ou seja, não há tanta diferença, apenas que o JDK é fornecido pela Oracle e é o kit java por isso o nome inicia com a letra J.

O que são variáveis de ambiente?

O que é IDE?
R: Integrated Development Environment ou Ambiente Integrado de Desenvolvimento, é um programa de computador que reúne características e ferramentas de apoio ao desenvolvimento de software com o objetivo de agilizar este processo.

Qual é melhor Eclipse ou NetBeans?
R: Eu sempre fui da seguinte opinião, não tem melhor, a escolha vai de você, porém o que podemos apontar são as vantagens de cada um e pesar qual é a melhor escolha pra você.

O Eclipse vejo ele como um IDE mais "livre", pois ao fazer o download ele não vem com muitas opções instaladas, porém esse é seu ponto forte, pois ele fica disposto a ser personalizado pelo usuário através da instalação de Plugins que o usuário irá utilizar, permitindo adicionar ou remover esses plugins a qualquer momento. 
Outro ponto positivo é que ele não precisa instalar, portanto você pode personalizar um eclipse para um determinado ambiente de desenvolvimento e depois descompactar outra pasta do eclipse para personalizar para outro tipo de ambiente de desenvolvimento (por exemplo um eclipse para desenvolvimento em Android e um para desenvolvimento Web), ou até mesmo configurar um eclipse e salvá-lo em um pendrive ou qualquer outro dispositivo móvel para sempre utilizar o seu eclipse já personalizado. 
O que torna o Eclipse forte também é o fato de ser utilizado em muitas empresas de desenvolvimento de software, pois essas empresas geralmente utilizam muitas ferramentas de Terceiros em seus projetos, o que torna uma opção de fácil personalização para os desenvolvedores.

O NetBeans vejo ele como um IDE mais "completo", um software contendo várias funcionalidades já integradas nele, funcionalidades que no eclipse teria que ser instalada, um ambiente pronto para desenvolvimento, porém o seu uso é baseado na forma que ele vem, ou seja, não é tão "moldável" como o Eclipse. 
Também tem opção de instalação de plugins, porém não tão utilizada quanto no Eclipse. É uma IDE muito boa pois está em constante atualização, sempre compatível com as tecnologias mais novas que estão no mercado, sua interface gráfica é bem projetada, e a forma como ele constrói as estruturas dos projetos é bem definida e intuitiva. 
Também conta com uma ferramenta de criação de interface gráfica(GUI) para JavaSE, que é muito boa e fácil de utilizar.

Ok, mas se as duas são boas, porque a maioria das empresas só utilizam Eclipse?
R: A verdade é que é meio de praxe desenvolvedores optarem pelo uso do Eclipse, porém nada te impede de utilizar o NetBeans, as empresas de desenvolvimento geralmente utilizam ferramentas de automação de compilação, construção e gerenciamento de projetos, como por exemplo o ANT (http://ant.apache.org/) ou o MAVEN (http://maven.apache.org/), o que possibilita trabalhar no mesmo projeto seja qual for a IDE.

Acho que isso é um bom tema para outro Post então vou parar por aqui hehehe, mas acho que deu para entender um pouco as diferenças de um e de outro.

Nessas IDEs só posso programar em Java?
R: Não, você pode trabalhar em outras linguagens também. No Eclipse é necessário baixar e configurar as ferramentas necessárias para trabalhar com uma determinada linguagem. O NetBeans já tem um suporte nativo à outras linguagens de programação.

_____

Bom, acho que é isso pessoal, esse post fica por aqui. Espero que seja útil. Comentem e compartilhem a informação!
Abraço e até o próximo!