sexta-feira, 1 de junho de 2012

Desenvolvendo aplicações Android Parte IV: Iniciando no Android 4.0



Continuando o Ultimo post Desenvolvendo aplicações Android Parte III: Iniciando no Android 4.0, vamos agora passar mais um pouco de conhecimento sobre esta plataforma. Vamos lá!


3. Aplicativo para Android Arquitetura
3.1. AndroidManifest.xml

Os componentes e as configurações de um aplicativo Android são descritas no arquivo AndroidManifest.xml . Por exemplo, todas as Activities e Services do aplicativo devem ser declarados neste arquivo.

Deve conter também as permissões necessárias para a aplicação. Por exemplo, se a aplicação requer acesso à rede deve ser especificada aqui.

                                                            
<?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android = "http://schemas.android.com/apk/res/android"
       package = "de.vogella.android.temperature"
       android:versionCode = "1"
       android:versionName = "1.0" >
     <application android:icon = "@drawable/icon" android:label = "@string/app_name" >
         <activity android:name = ".Convert"
                   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>
     <uses-sdk android:minSdkVersion = "9"  />
 
 </manifest> 
                                             

O package atributo define o pacote de base para os objetos Java referidos neste arquivo. Se um objeto Java está dentro de um pacote diferente, deve ser declarado com o nome completo do pacote qualificado.

O Google Play requer que todas as aplicações Android usem seu próprio pacote único. Por isso, é um bom hábito usar seu nome de domínio reverso como nome do pacote. Isso irá evitar colisões com outros aplicativos Android.

android:versionName e android:versionCode especificam a versão do seu aplicativo.versionName é que o usuário vê e pode ser qualquer sequencia.

versionCode deve ser um número inteiro. O Android Market determina com base no versionCode , se deve executar uma atualização das aplicações para as instalações existentes. Você geralmente começa com "1" e aumenta esse valor por um, se você tiver uma nova versão de seu aplicativo.

A etiqueta de <activity> define uma Activity , neste exemplo apontando para a classe Convert  do pacote node.vogella.android.temperature . Um filtro de intenção está registrado para esta classe que define que esta Activity é iniciada uma vez que o aplicativo é iniciado.A categoria de definição category android:name="android.intent.category.LAUNCHER" define que esta aplicação é adicionada ao diretório do aplicativo no dispositivo Android.

A @string/app_name valor refere-se a arquivos de recursos que contêm o valor real do nome do aplicativo. O uso do arquivo de recurso facilita a fornecer recursos diferentes,Strings por exemplo, cores, ícones, para diferentes dispositivos e facilita a tradução de aplicações.
O "uso-sdk" parte do arquivo AndroidManifest.xml  define a versão SDK mínimo para que sua aplicação é válido. Isso vai impedir que o aplicativo a ser instalado em dispositivos com versões mais antigas do SDK.

3.2. R.java e Recursos

O " gen "diretório em um projeto Android contém valores gerados. R.java é uma classe gerada que contém referências a certos recursos do projeto.
Esses recursos devem ser definidos no diretório "res" e podem ser arquivos XML, ícones ou imagens. Você pode por exemplo definir valores, menus, layouts ou animações através de arquivos XML.

Se você criar um novo recurso, a referência correspondente é automaticamente criada em R.java através das ferramentas Eclipse ADT. Estas referências são estáticas e definem valores int ID para os recursos.

O sistema Android fornece métodos para acessar o recurso correspondente através destes de identificação.

Por exemplo, para acessar uma String com o R.string.yourString ID, você usaria o método getString(R.string.yourString)) .

R.java é criada automaticamente pelo ambiente de desenvolvimento Eclipse, alterações manuais não são necessárias e será substituído pela ferramenta.

3.3. Ativos

Enquanto o diretório res  contém valores estruturados, que são conhecidos para a plataforma Android, o diretório assets  pode ser usado para armazenar qualquer tipo de dados. Você pode acessar esses dados através do AssetsManager que você pode acessar os métodos getAssets() .

AssetsManager permite ler um activity como InputStream com o método  open() .

                                                            
 // Get the AssetManager
 AssetManager manager = getAssets();
 
 // Read a Bitmap from Assets
 try {
         InputStream open = manager.open( "logo.png" );
         Bitmap bitmap = BitmapFactory.decodeStream(open);
         // Assign the bitmap to an ImageView in this layout
         ImageView view = (ImageView) findViewById(R.id.imageView1);
         view.setImageBitmap(bitmap);
 } catch (IOException e) {
         e.printStackTrace();
 }
                                             

3.4. Atividades e Layouts

A interface de usuário para Activities é definida através de layouts. O layout define as incluídas Views(widgets) e suas propriedades.

Um layout pode ser definido através de código Java ou via XML. Na maioria dos casos, o layout é definido como um arquivo XML.

Layouts baseados em XML são definidos através de um arquivo de recurso na pasta /res/layout . Este arquivo especifica os ViewGroups e Views , sua relação e seus atributos para este layout específico.

Se uma View precisa ser acessada por meio de código Java, você tem que dar à View uma identificação única através do android:id atributo. Para atribuir um novo ID para uma View use @+id/yourvalue . A seguir mostra um exemplo em que um Button recebe o "button1" ID atribuído.

                                                                         
 <Button
         android:id = "@+id/button1"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content"
         android:text = "Show Preferences"  >
 </Button>
                                             

Por essa conversão irá criar e atribuir um novo yourvalue ID para o correspondente View . Em seu código Java você pode acessar uma  View através do métodofindViewById(R.id.yourvalue) .

Definição de layouts via XML é geralmente a melhor maneira de como separar a lógica de programação a partir da definição de layout. Ele também permite a definição de layouts diferentes para dispositivos diferentes. Você também pode misturar as duas abordagens.

3.5. Referência aos recursos em arquivos XML

Em seus arquivos XML, por exemplo, arquivos de layout, você pode, se referir a outros recursos através do @sinal.

Por exemplo, se você quiser se referir a uma cor que está definida em um recurso XML, você pode consultá-la via @color/your_id . Ou, se você definiu uma string "Olá" em um arquivo de recurso, você pode acessá-lo via @string/hello .

3.6. Atividades e Ciclo de Vida

O sistema Android controla o ciclo de vida de sua aplicação. A qualquer momento o sistema Android pode parar ou destruir a sua aplicação, por exemplo, por causa de uma chamada recebida. O sistema Android define um ciclo de vida de Activities através de métodos pré-definidos. Os métodos mais importantes são:
  • onSaveInstanceState() – chamando-o a Activity é interrompida. Usado para guardar dados de modo que a Activity pode restaurar seus estados se re-iniciado
  • onPause() - sempre chamado se a Activity termina, pode ser usada para liberar recursos ou salvar dados
  • onResume() - chamado se a Activity é re-iniciado, pode ser usado para inicializar os campos
3.7. Mudança de configuração

Uma Activity também será reiniciado, se uma "mudança de configuração", assim chamada acontece. A mudança de configuração acontece se um evento é disparado o que pode ser relevante para a aplicação.Por exemplo, se o utilizador altera a orientação do dispositivo (verticalmente ou horizontalmente). Android assume que uma Activity pode querer usar diferentes recursos para essas orientações e reinicia a Activity .

No emulador você pode simular a mudança de orientação via CNTR + F11.

Você pode evitar um reinício do seu pedido de mudanças de configuração determinados através dosconfigChanges  que atribuem em sua Activity uma definição na sua AndroidManifest.xml . A seguir Activity não será reiniciada em caso de mudanças de orientação ou posição do teclado físico (oculto / visível).

                                                            
 < <activity android:name = ".ProgressTestActivity"
      android:label = "@string/app_name"
      android:configChanges = "orientation|keyboardHidden|keyboard" >
 </activity>
                                             

3.8. Contexto

A classe android.content.Context fornece as conexões com o sistema Android. É a interface para a informação global sobre o ambiente de aplicação. Context também fornece acesso ao AndroidServices , por exemplo, o Serviço de Localização. Activities e Services estendem o Context da classe e, portanto, pode ser usado como Context.

É isso ai galera! Por hoje paramos por aqui, em breve continuarei este grande Tutorial!

Abraços!
Bruno Rafael.

Veja também:

terça-feira, 29 de maio de 2012

Desenvolvendo aplicações Android Parte III: Iniciando no Android 4.0


Desenvolvimento com Android e Eclipse



Este tutorial descreve como criar aplicativos Android com o Eclipse. Ele é baseado no Eclipse 3.7 (Indigo), Java 1.6 e 4.0 do Android (Ice Cream Sandwich).

Nesta Parte, iremos aprender sobre os seguintes ítens:


1. Componentes Android

A seguir dá um breve resumo dos componentes mais importantes do Android.

1.1. Atividade

Activity representa a camada de apresentação de uma aplicação Android. Uma descrição simplificada é que uma Activity representa uma tela na sua aplicação Android. Isso é um pouco incorreto como Activities podem ser exibidos como caixas de diálogo ou pode ser transparente.
Um aplicativo Android pode ter várias Activities .

1.2. Visto e ViewGroups

Views são widgets de interface de usuário, por ex campos de texto. A classe base para todos os Views é android.view.View . Views muitas vezes têm atributos que podem ser usados ​​para alterar sua aparência e comportamento.
ViewGroup é responsável por organizar outras Views . A ViewGroup também é chamado de gerenciador de layout. A classe base para um gerenciador de layout é android.view.ViewGroups que se estende View .
ViewGroups pode ser aninhado para criar layouts complexos. Você não deve nestle ViewGroups muito profundamente, pois isso tem um impacto negativo sobre o desempenho.

1.3. Intenções

Intents são mensagens assíncronas que permitem a aplicação de solicitar a funcionalidade de outros componentes do sistema Android, por exemplo, de Services ou Activities . Um aplicativo pode chamar um componente direta (explícita Intent ) ou pedir o sistema Android para avaliar componentes registrados para um determinado Intent (implícitos Intents ). Por exemplo, o aplicativo poderia implementar o compartilhamento de dados através de uma Intent e todos os componentes que permitem o compartilhamento de dados estará disponível para o usuário selecionar. Aplicações registar-se para um Intent via um IntentFilter .
Intents permitem combinar componentes fracamente acoplados para executar determinadas tarefas.

1.4. Serviços

Services realizar tarefas em segundo plano, sem fornecer uma interface de usuário. Eles podem notificar o usuário por meio da estrutura de notificação no Android.

1.5. ContentProvider

ContentProvider fornece uma interface estruturada para dados do aplicativo. Através de um ContentProvider seu aplicativo pode compartilhar dados com outras aplicações. Android contém uma base de dados SQLite que é frequentemente usado em conjunto com um ContentProvider . O banco de dados SQLite iria armazenar os dados, que pode ser acessada através do ContentProvider .

1.6. BroadcastReceiver

BroadcastReceiver podem ser registrados para receber mensagens do sistema e Intents . O BroadcastReceiver será notificado pelo sistema Android, se a situação referida acontece. Por exemplo, um BroadcastReceiver poderia ter chamado uma vez que o sistema Android concluído o processo de inicialização ou se uma chamada é recebida.

1.7. (HomeScreen) Widgets

Widgets são componentes interativos que são utilizados principalmente na homescreen Android. Eles normalmente apresentam algum tipo de dados e permitir ao usuário executar ações através deles. Por exemplo, um Widget pode exibir um breve resumo dos novos e-mails e se o usuário seleciona um e-mail, ele pode iniciar o aplicativo de e-mail com o e-mail selecionado.

1.8. Outro

Android fornecer muitos componentes mais, mas a lista acima descreve os mais importantes. Outros componentes do Android são "pastas ao vivo" e "Papéis de parede vivo". Pastas ao vivo exibir dados na tela inicial, sem lançar o aplicativo correspondente.

2. Android Development Tools

2.1. Quais são as Ferramentas de desenvolvimento Android?

Google fornece as Android Development Tools (ADT) para desenvolver aplicativos para Android com o Eclipse. ADT é um conjunto de componentes (plug-ins) que se estendem a IDE Eclipse com capacidades de desenvolvimento do Android.
ADT contém todas as funcionalidades necessárias para criar, compilar, depurar e implantar aplicativos do Android a partir do IDE do Eclipse e da linha de comando. Outros IDE, por exemplo, IntellJ, são também reutilizar componentes de ADT.
ADT também fornece um emulador de dispositivo Android, para que os aplicativos do Android pode ser testado sem um telefone Android real.

2.2. Dalvik Virtual Machine

O sistema Android usa uma máquina virtual especial, ou seja, a máquina virtual Dalvik para executar aplicações baseadas em Java. Dalvik utiliza um formato de código de bytes própria, que é diferente de bytecode Java.
Portanto, você não pode executar diretamente os arquivos de classe Java no Android, eles precisam são convertidos no formato bytecode Dalvik.

2.3. Como desenvolver aplicativos para Android

Os aplicativos Android são primeiramente escrito na linguagem de programação Java. Os arquivos de origem Java são convertidos para arquivos de classe Java, o compilador Java.
Android fornece uma ferramenta chamada "dx" "que converte arquivos de classe Java em um dex arquivo (Executável Dalvik). Todos os arquivos de classe de um aplicativo são colocadas em um arquivo comprimido dex.. Durante este processo de conversão de informação redundante nos arquivos de classe são otimizados no arquivo de dex.. Por exemplo, se a mesma seqüência é encontrada em arquivos de classes diferentes, o arquivo. dex contém apenas uma referência, uma vez desta String.
Esses arquivos são, portanto, dex muito menores em tamanho do que os arquivos de classe correspondentes.
O arquivo. Dex e os recursos de um projeto Android, por exemplo, as imagens e arquivos XML, são embalados em um .apk arquivo (pacote Android). O programa aapt (Android Packaging Tool Ativos) realiza esta embalagem.
A resultante. Arquivo APK contém todos os dados necessários para executar o aplicativo Android e pode ser implantado em um dispositivo Android por meio da ferramenta "adb".
O Android Development Tools (ADT) permite que todas essas etapas são realizadas de forma transparente para o usuário; tanto dentro do Eclipse ou via linha de comando.
Se você usar a ferramenta ADT você pressiona um botão ou executar um script ea aplicação Android todo (. Arquivo APK) será criado e implantado.

2.4. Os editores de recursos

A ADT permite ao desenvolvedor definir certos artefatos, cordas, por exemplo e os arquivos de layout, de duas maneiras: através de um editor rico, e diretamente via XML. Isto é feito através de várias páginas em editores Eclipse. Nestes editores você pode alternar entre as duas representações, clicando na guia na parte inferior da tela.
Por exemplo, se você abrir a "res / layout / main.xml" arquivo no Package Explorer, você pode alternar entre as duas representações, conforme ilustrado na imagem seguinte.



2.5. Log

Android usa o android.util.Log classe para a exploração madeireira com o Log.i() , Log.w() eLog.e() e Log.wtf() métodos para registro. Esta lista é ordenada por Separação.
O primeiro parâmetro de estes método é a categoria eo segundo é a mensagem.
Normalmente, você cria um Constants classe em seu aplicativo para Android e fornecer sua bandeira log como um campo final estático público.
                              
 pacote de.vogella.android.first;

 públicos constantes da classe {
         LOG public static String final = "de.vogella.android.first";
 }

                      
Android informa que um aplicativo implantado não deve conter código de registro. As ferramentas de desenvolvimento Android fornecer o BuildConfig.DEBUG bandeira para esta finalidade. Esta bandeira será automaticamente definida para false , se você exportar o aplicativo Android para implantação.Durante o desenvolvimento que será definido como true , portanto, permitir que você veja as suas declarações de registo durante o desenvolvimento.
O exemplo a seguir mostra como escrever uma mensagem de log de erro. Esta mensagem é visível no "LogCat" vista em Eclipse.
                              
 if (BuildConfig.DEBUG) {
         Log.e (Constants.LOG ", onCreate chamado");
 }
                       

Espero que tenham gostado. Continuaremos este Post em breve.





domingo, 27 de maio de 2012

AbstractTableModel - Será que é tão difícil assim?

Vamos repassar mais esta!

AbstractTableModel é uma classe abstrata que implementa a interface TableModel. Ela fornece código padrão para disparar TableModelEvents com os métodos fireTableRowsDeleted(), fireTableCellUpdated() e fireTableChanged(). Ela também gerencia todos os TableModelListeners registrados em um EventListenerList.

O método findColumn() procura o índice de uma coluna com um dado nome. Esta pesquisa é feita de modo linear e deve ser sobrescrita para modelos de tabelas enormes.

Três métodos devem ser implementados em subclasses concretas: getRowCount(), getColumnCount() e getValueAt(int row, int column).


1. JTable -> Controla a view da tabela: ordenação de colunas, ordenação das linhas, highlight, tamanho da célula; 
2. TableModel -> Diz que dados serão exibidos na tabela. Quantas linhas e que informação vai em cada coluna. Também pode sugerir o nome da coluna; 
3. TableCellRenderer -> É o componente que o JTable usa para efetivamente desenhar a célula; 
4. TableCellEditor -> É o componente que o JTable usa para editar a célula; 
5. TableColumn -> Contém informações sobre uma coluna. 

Exemplo de implementação:




Descrição:
JTable é um componente usado para exibir dados nas duas formas dimensional e  tabular. O componente é baseado no Modelo - View - Controller arquitetura (MVC).O JTable é um componente GUI e actua como um Ver, e é dependente do modelo de dados. O dados modelo para JTable pode ser qualquer modelo que implementa a interface TableModel de javax . pacote swing.table. O modelo JTable também pode ser estendido de classe AbstractTableModel do pacote javax.swing.table. Esta classe abstrata fornece padrão implementações para a maioria dos métodos na interface TableModel. O modelo de tabela pode armazenar os dados da tabela, sob qualquer forma, Vector, HashTable, ou apenas uma matriz. O TableModel deve implementar o método setValueAt (Object value, int linha, int col) para atualizar corretamente os dados no modelo de dados da célula da tabela e getValueAt (int row, int col) para atualizar corretamente a célula JTable com os dados no modelo de mesa. O JTable deve ser adicionado a uma ScrollPane e não directamente a qualquer componente. O ScrollPane cuida da rolagem da tabela e recebe automaticamente o cabeçalho da tabela, que mostra os nomes das colunas, e coloca-lo em cima da mesa. Os nomes das colunas permanecer visível na parte superior da área de visualização, mesmo que os utilizadores rola para baixo.

O exemplo a seguir mostra como criar uma JTable simples usando um TableModel. O exemplo é para mostrar as informações da máquina na forma tabular. As informações da máquina são armazenadas em um objeto MachineData. A tabela simples modelo de tabela se estende AbstractTableModel e mantém o vetor MachineData. O modelo implementa, getValueAt () e setValueAt () métodos para atualizar o JTable com os dados no modelo de mesa e vice-versa.



//package 



//import statements 
import javax.swing.*
import javax.swing.table.*
import java.util.*
import java.awt.*



/** 
* SimpleTableFrame.java 
* This class shows how to create a simple JTable 
* using table model 
* 
* 
*/ 
public class SimpleTableFrame extends JFrame 
    //JTable table 
    private JTable m_simpleTable; 
    //JTable model 
    private SimpleTableModel m_simpleTableModel; 
     
    /** 
    * Constructor 
    * 
    * @return void 
    * @exception 
    */ 
    public SimpleTableFrame() 
    { 
        super("Simple Table Demo"); 
         
      
        m_simpleTableModel = new SimpleTableModel(getDummyData()); 
         
  
        m_simpleTable = new JTable(m_simpleTableModel); 
         
        
        JScrollPane scrollPane = new JScrollPane(m_simpleTable); 
         
        
        getContentPane().add(scrollPane); 
    } 
     
    /** 
    * getDummyData 
    * generating dummy MachineData object and creating a vector 
    */ 
    private Vector getDummyData() 
    { 
        Vector dummyMacData = new Vector(1010); 
         
        dummyMacData.addElement(new MachineData 
                               (new Integer(100), "Robert", "288.209.140.223", 
                                "Win NT", "Engineering")); 
        dummyMacData.addElement(new MachineData 
                               (new Integer(105), "Rahul", "288.209.140.214", 
                                "Solaris 5", "Engineering")); 
        dummyMacData.addElement(new MachineData 
                               (new Integer(110), "Daina", "288.209.140.220", 
                                "HP UX", "Engineering")); 
        dummyMacData.addElement(new MachineData 
                               (new Integer(106), "Vijay", "288.209.140.215", 
                                "Win NT", "Engineering")); 
        dummyMacData.addElement(new MachineData 
                                (new Integer(302), "Andy", "288.209.142.203", 
                                "Win 98", "Human Resource")); 
        dummyMacData.addElement(new MachineData 
                                (new Integer(504), "Tom", "288.209.141.207", 
                                "Win NT", "Marketing")); 
        dummyMacData.addElement(new MachineData 
                                (new Integer(104), "Bill", "288.209.140.222", 
                                "Win NT", "Engineering")); 
         
        return dummyMacData; 
    } 



    /** 
    * main 
    * main method, starting point 
    */ 
    public static void main(String[] arg) 
    { 
        SimpleTableFrame m = new SimpleTableFrame(); 
         
        m.setVisible(true); 
        m.setSize(new Dimension(600300)); 
        m.validate(); 
    } 
     
    /** 
    * SimpleTableModel.java 
    * This class is the table nodel 
    * 
    * @author Rahul Sapkal(rahul@javareference.com) 
    */ 
    public class SimpleTableModel extends AbstractTableModel 
    { 
         
        public static final int    MAC_CODE_COL = 0;                                    
        public static final int    MAC_NAME_COL = 1
        public static final int    IP_COL = 2
        public static final int    OS_COL = 3;   
        public static final int    DOMAIN_COL = 4
         
         
        public String[] m_colNames = {"Machine Code", 
                                      "Machine Name", 
                                      "IP Address", 
                                      "Operating System", 
                                      "Domain"}; 
         
        public Class[]  m_colTypes = {Integer.class, 
                                      String.class,  
                                      String.class, 
                                      String.class, 
                                      String.class}; 
         
         
        Vector m_macDataVector; 
         
        /** 
        * Constructor 
        */ 
        public SimpleTableModel(Vector macDataVector) 
        { 
            super(); 
             
            //store the data 
            m_macDataVector = macDataVector; 
        } 




        public int getColumnCount() 
        {   
            return m_colNames.length; 
        } 
         
        /** 
* getRowCount 
* conta o numero de linhas 
*/ 
        public int getRowCount()     
        {   
            return m_macDataVector.size(); 
        } 
         
         
        /** 
* setValueAt 
* esta função atualiza os dados da tabela
*/ 
        public void setValueAt(Object value, int row, int col)  
        {     
            MachineData macData = (MachineData)(m_macDataVector.elementAt(row)); 
             
            switch(col) 
            { 
            case MAC_CODE_COL : macData.setMacCode((Integer) value); 
                                break; 
            case MAC_NAME_COL : macData.setMacName((String) value); 
                                break; 
            case IP_COL : macData.setMacIP((String) value); 
                          break; 
            case OS_COL : macData.setMacOS((String) value); 
                          break; 
            case DOMAIN_COL : macData.setMacDomain((String) value); 
                              break; 
            } 
        } 



         
        public String getColumnName(int col) 
        { 
            return m_colNames[col]; 
        } 



        public Class getColumnClass(int col)  
        { 
            return m_colTypes[col]; 
        } 



        /** 
* getValueAt 
* Esta função atualiza a tabela
*/ 
        public Object getValueAt(int row, int col) 
        { 
            MachineData macData = (MachineData)(m_macDataVector.elementAt(row)); 
             
            switch(col) 
            { 
            case MAC_CODE_COL : return macData.getMacCode(); 
            case MAC_NAME_COL : return macData.getMacName(); 
            case IP_COL : return macData.getMacIP(); 
            case OS_COL : return macData.getMacOS(); 
            case DOMAIN_COL : return macData.getMacDomain(); 
            } 



            return new String(); 
        } 
    } 
     
   
    public class MachineData    { 
        private Integer m_macCode; 
        private String m_macName; 
        private String m_macIP; 
        private String m_macOS; 
        private String m_macDomain; 
         
        public MachineData() 
        { 
        } 



        public MachineData(Integer macCode, String macName, 
                           String macIP, String macOS, 
                           String macDomain) 
        { 
            m_macCode = macCode; 
            m_macName = macName; 
            m_macIP = macIP; 
            m_macOS = macOS; 
            m_macDomain = macDomain; 
        } 
         
        public Integer getMacCode() 
        { 
            return m_macCode; 
        } 
         
        public String getMacName() 
        { 
            return m_macName; 
        } 
         
        public String getMacIP() 
        { 
            return m_macIP; 
        } 
         
        public String getMacOS() 
        { 
            return m_macOS; 
        } 
         
        public String getMacDomain() 
        { 
            return m_macDomain; 
        } 
         
        public void setMacCode(Integer macCode) 
        { 
            m_macCode = macCode; 
        } 
         
        public void setMacName(String macName) 
        { 
            m_macName = macName; 
        } 
         
        public void setMacIP(String macIP) 
        { 
            m_macIP = macIP; 
        } 
         
        public void setMacOS(String macOS) 
        { 
            m_macOS = macOS; 
        } 
         
        public void setMacDomain(String macDomain) 
        { 
            m_macDomain = macDomain; 
        } 
    }    
}

Espero que tenham gostado! Abraços!


Admin: Bruno

Olá Galera! muito grato por estarem acessando nosso blog. Espero que seja possível transmitir de forma compreensível um pouco de meus conhecimentos em programação, para esta comunidade de desenvolvedores que cresce cada vez mais! Espero que Gostem! Abraço! E meu enorme obrigado à Renato Simões, Átila Soares,Wanderson Quinto, Emerson e a toda galera que sempre ajudou meu sincero obrigado....
Especialmente a Natalia Failache e Rita de Cassia que sempre apoiaram este sonho....

De seu amigo Bruno Rafael.