SlideShare ist ein Scribd-Unternehmen logo
1 von 108
Downloaden Sie, um offline zu lesen
Aplicações Flexíveis
                      e de fácil manutenção
Friday, April 5, 13
à vista
                      10% OFF!

Friday, April 5, 13
MOBILECONF
                       10% OFF!

Friday, April 5, 13
Erich Egert
                      Instrutor e desenvolvedor pela Caelum



                                   encontre-me:
                                    @erichegt
                               github.com/erichegt


Friday, April 5, 13
Erissssshhhhhh



Friday, April 5, 13
Friday, April 5, 13
Primeira tela:
                        listagem!


Friday, April 5, 13
De onde vêm os
                          dados?


Friday, April 5, 13
JSON




Friday, April 5, 13
public class ListagemActivity extends Activity {
                        //...

                      	 @Override
                      	 protected void onCreate(Bundle bundle) {
                      	 	 //...

                      	 	 try {
                      	 	 	 HttpClient httpclient = new DefaultHttpClient();

                      	 	 	 HttpGet httpGet = new HttpGet(endereco);
                      	 	 	 HttpResponse resp = httpclient.execute(httpGet);

                      	   	   	   String jsonCarros =
                      	   	   	   	 	 EntityUtils.toString(resp.getEntity());
                      	   	   	   // colocar no ListView
                      	   	   }   catch (Exception e) {
                      	   	   	   // ...
                      	   	   }



Friday, April 5, 13
public class ListagemActivity extends Activity {
                        //...

                      	 @Override
                      	 protected void onCreate(Bundle bundle) {
                      	 	 //...




                          Quem roda?
                      	 	 try {
                      	 	 	 HttpClient httpclient = new DefaultHttpClient();

                      	 	 	 HttpGet httpGet = new HttpGet(endereco);
                      	 	 	 HttpResponse resp = httpclient.execute(httpGet);

                      	   	   	   String jsonCarros =
                      	   	   	   	 	 EntityUtils.toString(resp.getEntity());
                      	   	   	   // colocar no ListView
                      	   	   }   catch (Exception e) {
                      	   	   	   // ...
                      	   	   }



Friday, April 5, 13
public class ListagemActivity extends Activity {
                        //...




                              UIThread
                      	 @Override
                      	 protected void onCreate(Bundle bundle) {
                      	 	 //...

                      	 	 try {
                      	 	 	 HttpClient httpclient = new DefaultHttpClient();

                      	 	 	 HttpGet httpGet = new HttpGet(endereco);
                      	 	 	 HttpResponse resp = httpclient.execute(httpGet);

                      	   	   	   String jsonCarros =
                      	   	   	   	 	 EntityUtils.toString(resp.getEntity());
                      	   	   	   // colocar no ListView
                      	   	   }   catch (Exception e) {
                      	   	   	   // ...
                      	   	   }



Friday, April 5, 13
Friday, April 5, 13
EM PARALELO!




Friday, April 5, 13
AsyncTask

              UIThread
                            Thread
                            (tarefa pesada)




Friday, April 5, 13
JSON




                      e no fim da tarefa
                           pesada?
Friday, April 5, 13
Tela!
                      UIThread




Friday, April 5, 13
AsyncTask

                      UIThread             onPreExecute


                        Thread            doInBackground
                        (tarefa pesada)

                      UIThread            onPostExecute


Friday, April 5, 13
AsyncTask

                      UIThread             onPreExecute


                        Thread            doInBackground
                        (tarefa pesada)

                      UIThread            onPostExecute


Friday, April 5, 13
public class BuscaCarrosTask
                    extends AsyncTask<Void, Void, List<Carro>>{

     	 //...

            protected void onPostExecute(final List<Carro> result) {

     	 	 ListView listaCarros = (...) activity.findViewById(...);

     	 	 ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...);
     	 	 listaCarros.setAdapter(adapter);
     	 	
     	 	 listaCarros.setOnItemClickListener(
           new OnItemClickListener() {
       	 	 	 public void onItemClick(...) {
       	 	 	 	 Carro carroSelecionado = result.get(posicao);
     	 	 	 	
     	 	 	 	



Friday, April 5, 13
public class BuscaCarrosTask
                    extends AsyncTask<Void, Void, List<Carro>>{

     	 //...

            protected void onPostExecute(final List<Carro> result) {

     	 	 ListView listaCarros = (...) activity.findViewById(...);

     	 	 ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...);
     	 	 listaCarros.setAdapter(adapter);
     	 	
     	

                         UIThread
       	 listaCarros.setOnItemClickListener(
           new OnItemClickListener() {
       	 	 	 public void onItemClick(...) {
       	 	 	 	 Carro carroSelecionado = result.get(posicao);
     	 	 	 	
     	 	 	 	



Friday, April 5, 13
public class BuscaCarrosTask
                    extends AsyncTask<Void, Void, List<Carro>>{

     	 //...

            protected void onPostExecute(final List<Carro> result) {

     	 	 ListView listaCarros = (...) activity.findViewById(...);

     	 	 ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...);
     	 	 listaCarros.setAdapter(adapter);
     	 	
     	

                         UIThread
       	 listaCarros.setOnItemClickListener(
           new OnItemClickListener() {
       	 	 	 public void onItemClick(...) {
       	 	 	 	 Carro carroSelecionado = result.get(posicao);
     	 	 	 	
     	 	 	 	



Friday, April 5, 13
Task manipular tela?




Friday, April 5, 13
Acoplamento...




Friday, April 5, 13
Delegate




Friday, April 5, 13
Delegate


                  Activity




Friday, April 5, 13
Delegate
                        delega!


                  Activity




Friday, April 5, 13
Delegate
                        delega!


                  Activity        AsyncTask




Friday, April 5, 13
Delegate
                        delega!


                  Activity                 AsyncTask

                                  lida com resultado!



Friday, April 5, 13
public class BuscaCarrosTask
                    extends AsyncTask<Void, Void, List<Carro>>{

     	 //...



            protected void onPostExecute(final List<Carro> result) {

     	 	 ListView listaCarros = (...) activity.findViewById(...);

     	 	 ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...);
     	 	 listaCarros.setAdapter(adapter);
     	 	
     	 	 listaCarros.setOnItemClickListener(
           new OnItemClickListener() {
       	 	 	 public void onItemClick(...) {
       	 	 	 	 Carro carroSelecionado = result.get(posicao);
     	 	 	 	
     	 	 	 	



Friday, April 5, 13
public class BuscaCarrosTask
                    extends AsyncTask<Void, Void, List<Carro>>{

     	 //...
       public class BuscaCarrosTask(       I   quemMeChamou) {..,}

            protected void onPostExecute(final List<Carro> result) {

            quemMeChamou.lidaComResultado(result);
     	 	 ListView listaCarros = (...) activity.findViewById(...);
       }
     	
     	
     	
                                   Delegate
       	 ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...);
       //...
       	 listaCarros.setAdapter(adapter);
       	
     	 	 listaCarros.setOnItemClickListener(
             new OnItemClickListener() {
       	 	 	 public void onItemClick(...) {
       	 	 	 	 Carro carroSelecionado = result.get(posicao);
     	 	 	 	
     	 	 	 	



Friday, April 5, 13
Tasks:
                      DELEGATE
Friday, April 5, 13
Segunda tela:
                        detalhes!


                            ...


Friday, April 5, 13
Activity

Friday, April 5, 13
Intent




                      Activity

Friday, April 5, 13
Intent

                                 Activity

                      Activity

Friday, April 5, 13
Intent
                            “apelido”


                                        Activity

                      Activity

Friday, April 5, 13
public void onItemClick(...) {
                                                 Activity       1
	 	 Carro carro = result.get(posicao);

	     	 Intent irParaDetalhes = new Intent(this,DetalhesActivity.class);
	     	 irParaDetalhes.putExtra("carroSelecionado",carro);
	     	
	     }



                                                    Activity          2
        protected void onCreate(Bundle savedInstanceState) {
        	 	 TextView modelo = (TextView) findViewById(R.id.modelo);
        	 	
        	 	 Carro carroSelecionado = (Carro) getIntent()
                   .getSerializableExtra("carroSelecionado");
        	 	
        	 	 if (carroSelecionado != null) {
        	 	 	 modelo.setText(carroSelecionado.getModelo());



Friday, April 5, 13
public void onItemClick(...) {
                                                 Activity       1
	 	 Carro carro = result.get(posicao);

	     	 Intent irParaDetalhes = new Intent(this,DetalhesActivity.class);
	     	 irParaDetalhes.putExtra("carroSelecionado",carro);
	     	
	     }                       “carroSelecionado”

                                                    Activity          2
        protected void onCreate(Bundle savedInstanceState) {
        	 	 TextView modelo = (TextView) findViewById(R.id.modelo);
        	 	
        	 	 Carro carroSelecionado = (Carro) getIntent()
                   .getSerializableExtra("carroSelecionado");
        	 	
        	 	 if (carroSelecionado != null) {
        	 	 	 modelo.setText(carroSelecionado.getModelo());



Friday, April 5, 13
Constantes...




Friday, April 5, 13
Intent



           Activity


Friday, April 5, 13
Intent



           Activity


Friday, April 5, 13
Intent



           Activity


Friday, April 5, 13
Intent



           Activity
                      Dalvik

Friday, April 5, 13
Intent



           Activity
                      Dalvik
                                Dalvik
Friday, April 5, 13
Como passar de
                      uma VM pra outra?



Friday, April 5, 13
Serializar...



                                        11 01
                                       0
                                      1



Friday, April 5, 13
Serializar na mesma
                  VM...


                          11 01
                         0
                        1



Friday, April 5, 13
Serializar na mesma
                  VM...


                          11 01
                         0
                        1



Friday, April 5, 13
Parceable




Friday, April 5, 13
Tem mais...



Friday, April 5, 13
Friday, April 5, 13
Activity 2 em 1?




Friday, April 5, 13
Vamos dividir em
                         pedaços!




Friday, April 5, 13
Fragment



Friday, April 5, 13
Fragment
                          ==
                      IF’s INFINITOS!


Friday, April 5, 13
protected void onCreate(Bundle savedInstanceState) {
	    //...

	 	 FragmentManager manager = getSupportFragmentManager();

	 	 FragmentTransaction transaction = manager.beginTransaction();

	 	 if (isTabletNaHorizontal()) {

	 	 	 transaction.replace(R.id.esquerda, new ListagemFragment());
	 	 	 transaction.replace(R.id.direita,
        DetalhesFragment.fragmentComCarro(null));

	 	 } else {
	 	 	 transaction.replace(R.id.unico, new ListagemFragment());
	 	 }

	 	 transaction.commit();
	 }




Friday, April 5, 13
protected void onCreate(Bundle savedInstanceState) {
	    //...

	 	 FragmentManager manager = getSupportFragmentManager();

	 	 FragmentTransaction transaction = manager.beginTransaction();

	 	 if (isTabletNaHorizontal()) {

	 	 	 transaction.replace(R.id.esquerda, new ListagemFragment());
	 	 	 transaction.replace(R.id.direita,
        DetalhesFragment.fragmentComCarro(null));

	 	 } else {
	 	 	 transaction.replace(R.id.unico, new ListagemFragment());
	 	 }

	 	 transaction.commit();
	 }




Friday, April 5, 13
STRATEGY




Friday, April 5, 13
public class FabricaDeConteudo {
       	
       	 public static Conteudo getConteudo(CarrosActivity activity) {

       	 	 boolean ehTabletNaHorizontal = activity.getResources()
              .getBoolean(R.bool.ehTabletNaHorizontal);
       	 	
       	 	 if (ehTabletNaHorizontal) {
       	 	 	 return new ConteudoTablet(activity);
       	 	 } else {
       	 	 	 return new ConteudoSmart(activity);
       	 	 }	
       	 }
       }




Friday, April 5, 13
I
       public class FabricaDeConteudo {
       	
       	 public static Conteudo getConteudo(CarrosActivity activity) {

       	 	 boolean ehTabletNaHorizontal = activity.getResources()
              .getBoolean(R.bool.ehTabletNaHorizontal);
       	 	
       	 	 if (ehTabletNaHorizontal) {
       	 	 	 return new ConteudoTablet(activity);
       	 	 } else {
       	 	 	 return new ConteudoSmart(activity);
       	 	 }	
       	 }
       }




Friday, April 5, 13
I
       public class FabricaDeConteudo {
       	
       	 public static Conteudo getConteudo(CarrosActivity activity) {

       	 	 boolean ehTabletNaHorizontal = activity.getResources()
              .getBoolean(R.bool.ehTabletNaHorizontal);
       	 	
       	 	 if (ehTabletNaHorizontal) {
       	 	 	 return new ConteudoTablet(activity);
       	 	 } else {
       	 	 	 return new ConteudoSmart(activity);
       	 	 }	
       	 }
       }




Friday, April 5, 13
public class CarrosActivity extends FragmentActivity {
                	 private Conteudo conteudo;

                	 @Override
                	 protected void onCreate(Bundle savedInstanceState) {
                     //...
                	 	 conteudo = FabricaDeConteudo.getConteudo(this);




                	 }

                	 public void lidaComSelecaoDo(Carro carroSelecionado) {

                	 	 conteudo.lidaComSelecaoDo(carroSelecionado);




                	 }
                }

Friday, April 5, 13
public class CarrosActivity extends FragmentActivity {
                	 private Conteudo conteudo;

                	 @Override
                	 protected void onCreate(Bundle savedInstanceState) {
                     //...
                	 	 conteudo = FabricaDeConteudo.getConteudo(this);



                                           OU
                	 }

                	 public void lidaComSelecaoDo(Carro carroSelecionado) {

                	 	 conteudo.lidaComSelecaoDo(carroSelecionado);




                	 }
                }

Friday, April 5, 13
public class CarrosActivity extends FragmentActivity {
                	 private Conteudo conteudo;

                	 @Override
                	 protected void onCreate(Bundle savedInstanceState) {
                     //...
                	 	 conteudo = FabricaDeConteudo.getConteudo(this);



                                           OU
                	 }

                	 public void lidaComSelecaoDo(Carro carroSelecionado) {

                	 	 conteudo.lidaComSelecaoDo(carroSelecionado);




                                              OU
                	 }
                }

Friday, April 5, 13
Fragments:
                       Strategy!
Friday, April 5, 13
E como ganhar $ facil?




Friday, April 5, 13
Venda a mesma
                      app varias vezes...



Friday, April 5, 13
Friday, April 5, 13
Adapter
                                AsyncTask




LayoutInflater


      LocationManager

                                            ExpandableListView
   MapActivity

Friday, April 5, 13
busao SP




Friday, April 5, 13
busao SP

                        busao AC


Friday, April 5, 13
busao SP

                                 busao AC

                      busao UK
Friday, April 5, 13
Dar uma cara nova




Friday, April 5, 13
Plural de ônibus?




Friday, April 5, 13
Plural de ônibus?
                        ônibuses



Friday, April 5, 13
LÓGICA

Friday, April 5, 13
project libraries
Friday, April 5, 13
Friday, April 5, 13
Application
                      Resources

Friday, April 5, 13
values   colors.xml
                                background_geral




Friday, April 5, 13
values colors.xml
                                background_geral




                      values   colors.xml
                                background_geral




Friday, April 5, 13
Reaproveitamento:
                        Project Libraries!
                           Flexibilidade:
                      Application Resources!
Friday, April 5, 13
comportamentos
                         diferentes

Friday, April 5, 13
Friday, April 5, 13
Friday, April 5, 13
Fragment
                      ajuda nesse caso?!?




Friday, April 5, 13
Fragment
                      ajuda nesse caso?!?




Friday, April 5, 13
Mas e a Activity?




Friday, April 5, 13
Só serve pra...

                            Intent


              Activity
                      Dalvik           Dalvik
Friday, April 5, 13
Na mesma App...




                 startActivity(this, UmaActivity.class );
Friday, April 5, 13
startActivity(???.class )


Friday, April 5, 13
startActivity(“apelido” )


Friday, April 5, 13
AndroidManifest
                        Activity

                       “apelido”


Friday, April 5, 13
Friday, April 5, 13
startActivity(“apelido” )

Friday, April 5, 13
startActivity(“apelido” )

Friday, April 5, 13
Opis sou euzis!




                      startActivity(“apelido” )

Friday, April 5, 13
Intent Filters



Friday, April 5, 13
AndroidManifest

      <activity
         android:name=".MussumActivity"
         android:label="@string/app_name" >

               <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />

           <data
             android:host="localhost"
             android:pathPattern="/acao/customizada/mussum"
             android:scheme="busao" />
          </intent-filter>
      </activity>


Friday, April 5, 13
Intent i = new Intent(Intent.ACTION_VIEW);

           i.setData(Uri.parse(
               "busao://localhost/acao/customizada/"+
               getResources().getString(
                  R.string.tag_intent_implicita)));

           startActivity(i);




Friday, April 5, 13
Baixo acoplamento
                          e integração:
                         Intent Filters!
Friday, April 5, 13
Friday, April 5, 13
OBRIGADO!




                           @erichegt
                      github.com/erichegt

Friday, April 5, 13
Friday, April 5, 13
ORM...


Friday, April 5, 13
Friday, April 5, 13
Friday, April 5, 13

Weitere ähnliche Inhalte

Andere mochten auch

Analytics Hygiene - eMetrics Chicago 2014
Analytics Hygiene - eMetrics Chicago 2014Analytics Hygiene - eMetrics Chicago 2014
Analytics Hygiene - eMetrics Chicago 2014Todd Belcher
 
eMetrics Boston 2014 - Analytics Hygiene II
eMetrics Boston 2014 - Analytics Hygiene IIeMetrics Boston 2014 - Analytics Hygiene II
eMetrics Boston 2014 - Analytics Hygiene IITodd Belcher
 
Oh2013 product training ba_18_dec v4
Oh2013 product training ba_18_dec v4Oh2013 product training ba_18_dec v4
Oh2013 product training ba_18_dec v4lcw5_np
 
Volunteer luncheon
Volunteer luncheonVolunteer luncheon
Volunteer luncheonRobyn Shoaf
 
Conexao Java: Criando uma App Android
Conexao Java: Criando uma App AndroidConexao Java: Criando uma App Android
Conexao Java: Criando uma App AndroidErich Egert
 
M Belletrutti Hr Resume 071712
M Belletrutti Hr Resume 071712M Belletrutti Hr Resume 071712
M Belletrutti Hr Resume 071712Belletme
 
волшебный мир «Sai» стартовая
волшебный мир «Sai» стартоваяволшебный мир «Sai» стартовая
волшебный мир «Sai» стартоваяComu_kak
 
Svensk medeltid pp
Svensk medeltid ppSvensk medeltid pp
Svensk medeltid ppjnintkom
 
презентация ученика
презентация ученикапрезентация ученика
презентация ученикаComu_kak
 
Sobre los acuerdos malditos de la habana.
Sobre los acuerdos malditos de la habana.Sobre los acuerdos malditos de la habana.
Sobre los acuerdos malditos de la habana.Reporte Mundial
 

Andere mochten auch (13)

Organize your speech
Organize your speechOrganize your speech
Organize your speech
 
vinay koppuravuri_updated
vinay koppuravuri_updatedvinay koppuravuri_updated
vinay koppuravuri_updated
 
Analytics Hygiene - eMetrics Chicago 2014
Analytics Hygiene - eMetrics Chicago 2014Analytics Hygiene - eMetrics Chicago 2014
Analytics Hygiene - eMetrics Chicago 2014
 
eMetrics Boston 2014 - Analytics Hygiene II
eMetrics Boston 2014 - Analytics Hygiene IIeMetrics Boston 2014 - Analytics Hygiene II
eMetrics Boston 2014 - Analytics Hygiene II
 
Oh2013 product training ba_18_dec v4
Oh2013 product training ba_18_dec v4Oh2013 product training ba_18_dec v4
Oh2013 product training ba_18_dec v4
 
Volunteer luncheon
Volunteer luncheonVolunteer luncheon
Volunteer luncheon
 
Conexao Java: Criando uma App Android
Conexao Java: Criando uma App AndroidConexao Java: Criando uma App Android
Conexao Java: Criando uma App Android
 
M Belletrutti Hr Resume 071712
M Belletrutti Hr Resume 071712M Belletrutti Hr Resume 071712
M Belletrutti Hr Resume 071712
 
Social media powerpoint
Social media powerpointSocial media powerpoint
Social media powerpoint
 
волшебный мир «Sai» стартовая
волшебный мир «Sai» стартоваяволшебный мир «Sai» стартовая
волшебный мир «Sai» стартовая
 
Svensk medeltid pp
Svensk medeltid ppSvensk medeltid pp
Svensk medeltid pp
 
презентация ученика
презентация ученикапрезентация ученика
презентация ученика
 
Sobre los acuerdos malditos de la habana.
Sobre los acuerdos malditos de la habana.Sobre los acuerdos malditos de la habana.
Sobre los acuerdos malditos de la habana.
 

Ähnlich wie Mobile conf erich

JavaScript - Like a Box of Chocolates
JavaScript - Like a Box of ChocolatesJavaScript - Like a Box of Chocolates
JavaScript - Like a Box of ChocolatesRobert Nyman
 
Exceptions in PHP
Exceptions in PHPExceptions in PHP
Exceptions in PHPJanTvrdik
 
JSConf: All You Can Leet
JSConf: All You Can LeetJSConf: All You Can Leet
JSConf: All You Can Leetjohndaviddalton
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokusHamletDRC
 
CDI do básico ao avançado
CDI do básico ao avançadoCDI do básico ao avançado
CDI do básico ao avançadoAlberto Souza
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладкаDEVTYPE
 
computer notes - Data Structures - 14
computer notes - Data Structures - 14computer notes - Data Structures - 14
computer notes - Data Structures - 14ecomputernotes
 
Soundreader.classpathSoundreader.project Soundre.docx
Soundreader.classpathSoundreader.project  Soundre.docxSoundreader.classpathSoundreader.project  Soundre.docx
Soundreader.classpathSoundreader.project Soundre.docxwhitneyleman54422
 
Web Optimization Summit: Coding for Performance
Web Optimization Summit: Coding for PerformanceWeb Optimization Summit: Coding for Performance
Web Optimization Summit: Coding for Performancejohndaviddalton
 
Computer notes - Josephus Problem
Computer notes - Josephus ProblemComputer notes - Josephus Problem
Computer notes - Josephus Problemecomputernotes
 
Ast transformations
Ast transformationsAst transformations
Ast transformationsHamletDRC
 
JavaScript - Like a Box of Chocolates - jsDay
JavaScript - Like a Box of Chocolates - jsDayJavaScript - Like a Box of Chocolates - jsDay
JavaScript - Like a Box of Chocolates - jsDayRobert Nyman
 
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018Codemotion
 
Computer notes - Recursive
Computer notes  - RecursiveComputer notes  - Recursive
Computer notes - Recursiveecomputernotes
 

Ähnlich wie Mobile conf erich (20)

JavaScript - Like a Box of Chocolates
JavaScript - Like a Box of ChocolatesJavaScript - Like a Box of Chocolates
JavaScript - Like a Box of Chocolates
 
Exceptions in PHP
Exceptions in PHPExceptions in PHP
Exceptions in PHP
 
JSConf: All You Can Leet
JSConf: All You Can LeetJSConf: All You Can Leet
JSConf: All You Can Leet
 
AST Transformations at JFokus
AST Transformations at JFokusAST Transformations at JFokus
AST Transformations at JFokus
 
CDI do básico ao avançado
CDI do básico ao avançadoCDI do básico ao avançado
CDI do básico ao avançado
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка
 
computer notes - Data Structures - 14
computer notes - Data Structures - 14computer notes - Data Structures - 14
computer notes - Data Structures - 14
 
Fault tolerance made easy
Fault tolerance made easyFault tolerance made easy
Fault tolerance made easy
 
Raii
RaiiRaii
Raii
 
Soundreader.classpathSoundreader.project Soundre.docx
Soundreader.classpathSoundreader.project  Soundre.docxSoundreader.classpathSoundreader.project  Soundre.docx
Soundreader.classpathSoundreader.project Soundre.docx
 
Web Optimization Summit: Coding for Performance
Web Optimization Summit: Coding for PerformanceWeb Optimization Summit: Coding for Performance
Web Optimization Summit: Coding for Performance
 
Computer notes - Josephus Problem
Computer notes - Josephus ProblemComputer notes - Josephus Problem
Computer notes - Josephus Problem
 
Android basic 2 UI Design
Android basic 2 UI DesignAndroid basic 2 UI Design
Android basic 2 UI Design
 
The evolution of asynchronous JavaScript
The evolution of asynchronous JavaScriptThe evolution of asynchronous JavaScript
The evolution of asynchronous JavaScript
 
FSE 2008
FSE 2008FSE 2008
FSE 2008
 
Ast transformations
Ast transformationsAst transformations
Ast transformations
 
JavaScript - Like a Box of Chocolates - jsDay
JavaScript - Like a Box of Chocolates - jsDayJavaScript - Like a Box of Chocolates - jsDay
JavaScript - Like a Box of Chocolates - jsDay
 
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
 
Java 5 Features
Java 5 FeaturesJava 5 Features
Java 5 Features
 
Computer notes - Recursive
Computer notes  - RecursiveComputer notes  - Recursive
Computer notes - Recursive
 

Mobile conf erich

  • 1. Aplicações Flexíveis e de fácil manutenção Friday, April 5, 13
  • 2. à vista 10% OFF! Friday, April 5, 13
  • 3. MOBILECONF 10% OFF! Friday, April 5, 13
  • 4. Erich Egert Instrutor e desenvolvedor pela Caelum encontre-me: @erichegt github.com/erichegt Friday, April 5, 13
  • 7. Primeira tela: listagem! Friday, April 5, 13
  • 8. De onde vêm os dados? Friday, April 5, 13
  • 10. public class ListagemActivity extends Activity { //... @Override protected void onCreate(Bundle bundle) { //... try { HttpClient httpclient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(endereco); HttpResponse resp = httpclient.execute(httpGet); String jsonCarros = EntityUtils.toString(resp.getEntity()); // colocar no ListView } catch (Exception e) { // ... } Friday, April 5, 13
  • 11. public class ListagemActivity extends Activity { //... @Override protected void onCreate(Bundle bundle) { //... Quem roda? try { HttpClient httpclient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(endereco); HttpResponse resp = httpclient.execute(httpGet); String jsonCarros = EntityUtils.toString(resp.getEntity()); // colocar no ListView } catch (Exception e) { // ... } Friday, April 5, 13
  • 12. public class ListagemActivity extends Activity { //... UIThread @Override protected void onCreate(Bundle bundle) { //... try { HttpClient httpclient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(endereco); HttpResponse resp = httpclient.execute(httpGet); String jsonCarros = EntityUtils.toString(resp.getEntity()); // colocar no ListView } catch (Exception e) { // ... } Friday, April 5, 13
  • 15. AsyncTask UIThread Thread (tarefa pesada) Friday, April 5, 13
  • 16. JSON e no fim da tarefa pesada? Friday, April 5, 13
  • 17. Tela! UIThread Friday, April 5, 13
  • 18. AsyncTask UIThread onPreExecute Thread doInBackground (tarefa pesada) UIThread onPostExecute Friday, April 5, 13
  • 19. AsyncTask UIThread onPreExecute Thread doInBackground (tarefa pesada) UIThread onPostExecute Friday, April 5, 13
  • 20. public class BuscaCarrosTask extends AsyncTask<Void, Void, List<Carro>>{ //... protected void onPostExecute(final List<Carro> result) { ListView listaCarros = (...) activity.findViewById(...); ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...); listaCarros.setAdapter(adapter); listaCarros.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(...) { Carro carroSelecionado = result.get(posicao); Friday, April 5, 13
  • 21. public class BuscaCarrosTask extends AsyncTask<Void, Void, List<Carro>>{ //... protected void onPostExecute(final List<Carro> result) { ListView listaCarros = (...) activity.findViewById(...); ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...); listaCarros.setAdapter(adapter); UIThread listaCarros.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(...) { Carro carroSelecionado = result.get(posicao); Friday, April 5, 13
  • 22. public class BuscaCarrosTask extends AsyncTask<Void, Void, List<Carro>>{ //... protected void onPostExecute(final List<Carro> result) { ListView listaCarros = (...) activity.findViewById(...); ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...); listaCarros.setAdapter(adapter); UIThread listaCarros.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(...) { Carro carroSelecionado = result.get(posicao); Friday, April 5, 13
  • 26. Delegate Activity Friday, April 5, 13
  • 27. Delegate delega! Activity Friday, April 5, 13
  • 28. Delegate delega! Activity AsyncTask Friday, April 5, 13
  • 29. Delegate delega! Activity AsyncTask lida com resultado! Friday, April 5, 13
  • 30. public class BuscaCarrosTask extends AsyncTask<Void, Void, List<Carro>>{ //... protected void onPostExecute(final List<Carro> result) { ListView listaCarros = (...) activity.findViewById(...); ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...); listaCarros.setAdapter(adapter); listaCarros.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(...) { Carro carroSelecionado = result.get(posicao); Friday, April 5, 13
  • 31. public class BuscaCarrosTask extends AsyncTask<Void, Void, List<Carro>>{ //... public class BuscaCarrosTask( I quemMeChamou) {..,} protected void onPostExecute(final List<Carro> result) { quemMeChamou.lidaComResultado(result); ListView listaCarros = (...) activity.findViewById(...); } Delegate ArrayAdapter<Carro> adapter = new ArrayAdapter<Carro>(...); //... listaCarros.setAdapter(adapter); listaCarros.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(...) { Carro carroSelecionado = result.get(posicao); Friday, April 5, 13
  • 32. Tasks: DELEGATE Friday, April 5, 13
  • 33. Segunda tela: detalhes! ... Friday, April 5, 13
  • 35. Intent Activity Friday, April 5, 13
  • 36. Intent Activity Activity Friday, April 5, 13
  • 37. Intent “apelido” Activity Activity Friday, April 5, 13
  • 38. public void onItemClick(...) { Activity 1 Carro carro = result.get(posicao); Intent irParaDetalhes = new Intent(this,DetalhesActivity.class); irParaDetalhes.putExtra("carroSelecionado",carro); } Activity 2 protected void onCreate(Bundle savedInstanceState) { TextView modelo = (TextView) findViewById(R.id.modelo); Carro carroSelecionado = (Carro) getIntent() .getSerializableExtra("carroSelecionado"); if (carroSelecionado != null) { modelo.setText(carroSelecionado.getModelo()); Friday, April 5, 13
  • 39. public void onItemClick(...) { Activity 1 Carro carro = result.get(posicao); Intent irParaDetalhes = new Intent(this,DetalhesActivity.class); irParaDetalhes.putExtra("carroSelecionado",carro); } “carroSelecionado” Activity 2 protected void onCreate(Bundle savedInstanceState) { TextView modelo = (TextView) findViewById(R.id.modelo); Carro carroSelecionado = (Carro) getIntent() .getSerializableExtra("carroSelecionado"); if (carroSelecionado != null) { modelo.setText(carroSelecionado.getModelo()); Friday, April 5, 13
  • 41. Intent Activity Friday, April 5, 13
  • 42. Intent Activity Friday, April 5, 13
  • 43. Intent Activity Friday, April 5, 13
  • 44. Intent Activity Dalvik Friday, April 5, 13
  • 45. Intent Activity Dalvik Dalvik Friday, April 5, 13
  • 46. Como passar de uma VM pra outra? Friday, April 5, 13
  • 47. Serializar... 11 01 0 1 Friday, April 5, 13
  • 48. Serializar na mesma VM... 11 01 0 1 Friday, April 5, 13
  • 49. Serializar na mesma VM... 11 01 0 1 Friday, April 5, 13
  • 53. Activity 2 em 1? Friday, April 5, 13
  • 54. Vamos dividir em pedaços! Friday, April 5, 13
  • 56. Fragment == IF’s INFINITOS! Friday, April 5, 13
  • 57. protected void onCreate(Bundle savedInstanceState) { //... FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); if (isTabletNaHorizontal()) { transaction.replace(R.id.esquerda, new ListagemFragment()); transaction.replace(R.id.direita, DetalhesFragment.fragmentComCarro(null)); } else { transaction.replace(R.id.unico, new ListagemFragment()); } transaction.commit(); } Friday, April 5, 13
  • 58. protected void onCreate(Bundle savedInstanceState) { //... FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); if (isTabletNaHorizontal()) { transaction.replace(R.id.esquerda, new ListagemFragment()); transaction.replace(R.id.direita, DetalhesFragment.fragmentComCarro(null)); } else { transaction.replace(R.id.unico, new ListagemFragment()); } transaction.commit(); } Friday, April 5, 13
  • 60. public class FabricaDeConteudo { public static Conteudo getConteudo(CarrosActivity activity) { boolean ehTabletNaHorizontal = activity.getResources() .getBoolean(R.bool.ehTabletNaHorizontal); if (ehTabletNaHorizontal) { return new ConteudoTablet(activity); } else { return new ConteudoSmart(activity); } } } Friday, April 5, 13
  • 61. I public class FabricaDeConteudo { public static Conteudo getConteudo(CarrosActivity activity) { boolean ehTabletNaHorizontal = activity.getResources() .getBoolean(R.bool.ehTabletNaHorizontal); if (ehTabletNaHorizontal) { return new ConteudoTablet(activity); } else { return new ConteudoSmart(activity); } } } Friday, April 5, 13
  • 62. I public class FabricaDeConteudo { public static Conteudo getConteudo(CarrosActivity activity) { boolean ehTabletNaHorizontal = activity.getResources() .getBoolean(R.bool.ehTabletNaHorizontal); if (ehTabletNaHorizontal) { return new ConteudoTablet(activity); } else { return new ConteudoSmart(activity); } } } Friday, April 5, 13
  • 63. public class CarrosActivity extends FragmentActivity { private Conteudo conteudo; @Override protected void onCreate(Bundle savedInstanceState) { //... conteudo = FabricaDeConteudo.getConteudo(this); } public void lidaComSelecaoDo(Carro carroSelecionado) { conteudo.lidaComSelecaoDo(carroSelecionado); } } Friday, April 5, 13
  • 64. public class CarrosActivity extends FragmentActivity { private Conteudo conteudo; @Override protected void onCreate(Bundle savedInstanceState) { //... conteudo = FabricaDeConteudo.getConteudo(this); OU } public void lidaComSelecaoDo(Carro carroSelecionado) { conteudo.lidaComSelecaoDo(carroSelecionado); } } Friday, April 5, 13
  • 65. public class CarrosActivity extends FragmentActivity { private Conteudo conteudo; @Override protected void onCreate(Bundle savedInstanceState) { //... conteudo = FabricaDeConteudo.getConteudo(this); OU } public void lidaComSelecaoDo(Carro carroSelecionado) { conteudo.lidaComSelecaoDo(carroSelecionado); OU } } Friday, April 5, 13
  • 66. Fragments: Strategy! Friday, April 5, 13
  • 67. E como ganhar $ facil? Friday, April 5, 13
  • 68. Venda a mesma app varias vezes... Friday, April 5, 13
  • 70. Adapter AsyncTask LayoutInflater LocationManager ExpandableListView MapActivity Friday, April 5, 13
  • 72. busao SP busao AC Friday, April 5, 13
  • 73. busao SP busao AC busao UK Friday, April 5, 13
  • 74. Dar uma cara nova Friday, April 5, 13
  • 76. Plural de ônibus? ônibuses Friday, April 5, 13
  • 80. Application Resources Friday, April 5, 13
  • 81. values colors.xml background_geral Friday, April 5, 13
  • 82. values colors.xml background_geral values colors.xml background_geral Friday, April 5, 13
  • 83. Reaproveitamento: Project Libraries! Flexibilidade: Application Resources! Friday, April 5, 13
  • 84. comportamentos diferentes Friday, April 5, 13
  • 87. Fragment ajuda nesse caso?!? Friday, April 5, 13
  • 88. Fragment ajuda nesse caso?!? Friday, April 5, 13
  • 89. Mas e a Activity? Friday, April 5, 13
  • 90. Só serve pra... Intent Activity Dalvik Dalvik Friday, April 5, 13
  • 91. Na mesma App... startActivity(this, UmaActivity.class ); Friday, April 5, 13
  • 94. AndroidManifest Activity “apelido” Friday, April 5, 13
  • 98. Opis sou euzis! startActivity(“apelido” ) Friday, April 5, 13
  • 100. AndroidManifest <activity android:name=".MussumActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:host="localhost" android:pathPattern="/acao/customizada/mussum" android:scheme="busao" /> </intent-filter> </activity> Friday, April 5, 13
  • 101. Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse( "busao://localhost/acao/customizada/"+ getResources().getString( R.string.tag_intent_implicita))); startActivity(i); Friday, April 5, 13
  • 102. Baixo acoplamento e integração: Intent Filters! Friday, April 5, 13
  • 104. OBRIGADO! @erichegt github.com/erichegt Friday, April 5, 13