Ver mensagens sem resposta | Ver tópicos ativos Hoje é 20 Nov 2019, 05:52



Responder Tópico  [ 1 Mensagem ] 
 Compartilhar dados entre telas 
Autor Mensagem
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2735
Localização: Rio de Janeiro
Mensagem Compartilhar dados entre telas
Pra compartilhar dados entre activities, podemos usar as classes Intent e Bundle.
A classe Intent possui os métodos putExtra(chave, valor), onde chave é uma String que identifica a informação enviada.
A Bundle funciona da mesma forma, diferenciando apenas ma assinatura dos métodos, como putString() ou putDouble().

Enviar por Intent.


    String umaString = "Teste com envio de uma String";
   
    int umInt = 2015;
    boolean umBoolean = true;
   
    byte[] byteArray = new byte[2048];
    ArrayList<String> list = new ArrayList<>();
   
    // Essa é uma classe qualquer que
    // implementa a interface Serializable
    SerializableObject os = new SerializableObject();
    // popula o objeto aqui...

    // Essa implementa Parcelable
    ParcelableObject po = new ParcelableObject();
    // popula o objeto aqui...

    Intent i = new Intent(this, OutraActivity.class);
   
    i.putExtra("umaString", umaString);
    i.putExtra("umInt", umInt);
    i.putExtra("umBoolean", umBoolean);
    i.putExtra("byteArray", byteArray);
   
    i.putExtra("serializable", os);
    i.putExtra("parcelable", po);

    i.putStringArrayListExtra("list", list);
    startActivity(i);
 


Pra recuperar esses valores, devemos pegar essa Intent na OutraActivity usando o getIntent().


    Intent i = getIntent();
   
    String umaString = i.getStringExtra("umaString");
    int umInt = i.getIntExtra("umInt", 0);
   
    boolean umBoolean = i.getBooleanExtra("umBoolean", false);
    byte[] byteArray = i.getByteArrayExtra("byteArray");
   
    ObjectSerializable os = (ObjectSerializable) i.getSerializableExtra("serializable");
    ParcelableObject po = i.getParcelableExtra("parcelable");
   
    ArrayList<String> list = i.getStringArrayListExtra("list");
 


Os métodos que retornam um tipo primitivo devem receber no segundo parâmetro, um valor que será retornado caso a chave fornecida não seja encontrada.
Com Bundle funciona da mesma forma. Ao inserir nele os dados, o colocamos na Intent através do putExtras().


    String umaString = "Teste com envio de uma String";
    int[] intArray = new int[20];
    double umDouble = 20.15;
   
    Bundle bundle = new Bundle();
   
    bundle.putString("umaString", umaString);
    bundle.putIntArray("intArray", intArray);
    bundle.putDouble("umDouble", umDouble);
   
    Intent i = new Intent(this, OutraActivity.class);
    i.putExtras(bundle);
   
    startActivity(i);
 


Recuperamos esse Bundle através do getIntent() com o getExtras().


    Bundle bundle = getIntent().getExtas();
   
    String umaString = bundle.getString("umaString");
    int[] arrayInt = bundle.getIntArray("intArray");
    double umDouble = bundle.getDouble("umDouble");
 


Diferente da Intent, usar um valor no segundo parâmetro é opcional.

Um exemplo de classe implementando Parcelable:


import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by jeffersonlanzieri.
 */

public class User extends Object implements Parcelable {
    private long id;
   
    private String username;
    private String password;
   
    private String name;
    private String email;
   
    // get e set aqui
   
    public User() {
        //construtor vazio
    }
   
    // retorna um inteiro qualquer pra identificar a classe
    @Override
    public int describeContents() {
        return 1;
    }

    // serializa os dados
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(getId());
        dest.writeString(getUsername());
        dest.writeString(getPassword());
        dest.writeString(getName());
        dest.writeString(getEmail());
    }

    // esse atributo estático é obrigatório
    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel source) {
            User user = new User();

            user.setId(parcel.readLong());
            user.setUsername(parcel.readString());
            user.setPassword(parcel.readString());
            user.setName(parcel.readString());
            user.setEmail(parcel.readString());

            return user;
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };
}
 


Preste atenção nos dados e seus tipos, eles foram escritos no writeToParcel e pegos no createFromParcel na mesma ordem.

Aqui eu usei uma activity como exemplo, mas o mesmo funcionará também com services e receivers.
Há também um outro modo de compartilhar dados que é usando o padrão Singleton. Existe um tutorial sobre o assunto aqui no fórum, é uma boa opção quando não houver a possiblidade de usar Intent ou Bundle.

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


15 Jun 2015, 13:51
Perfil WWW
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 1 Mensagem ] 

Quem está online

Usuários vendo este fórum: Abraao, adelar, ademilson, Aderbal Nunes, adilson.afl, aechiara, Alessandro Tavares, aluclinux, anaguerra, andepunk, andi, andre.hebeler, Andreid, andrigo, Aniquiler, Antonio Carlos, Aparec, avsouza, azero, betofigu, Biel, Bitetti, BOMBER27, boydivalor, BTalhadas, buccalon, caiodemarco, Cajux, careisjr, cariabs8, carlos.macleod, Chaves, Corneta, Costa, Cynthia, DaDih*, Danilo Dias, danilosouza, dannieltec, Darth Maul, Dirceu W. C. Conte, DITÃO, dkclan, dmd, Dudi_FC, edervieira, EvertonLB, fcoroa, felipe.cintra, flaviocc, frankmendes, Gabriel Laet, garretereis, geovanebg, Gnomo, Gomes, gustavobarbosa, gutem25, hbarroco, henrique.garcia, icarodavi, itsN, jasn, jcdeveloper, jeanbr07, jorgecardoso, Josinhaz, jpespindola, JRSIQUEIRA, juliherms, juniorfranca, kidush, Knut, lalaine, Legiao, leonardodamata, levita, lucasmadeira, luciano.sml, Lucious, luiz.lago, Machado000, marcelocastellani, marciosoliveira, Marco Magoo, marcosrogel, marianatallas, Marini, Marlosm, Marlus Dias Silva, mauriciobreide, mcroft, miguel, mirelli, mmiottobarbosa, Newton Barbosa, nightwatch, nivaldo, nivea, nullPointer, pamonteiro, Paulo Bizzo, paulo.weber, phfmendes, Rafael Alencar, raninhofernandes, regeriob2br, Renan, renanpl, rguadagnini, ricardoogliari, ricardzanella, rixargolo, rocha, rodrigo aguiar, romualdo, Romulo, romuloff, ronamore, ronanPlus, rtodao, Rubens Prates, scattonevi, sergio, SidneiCP, sjta, talves, tchou, thiagoalgo, thiagotomais, tiagofalcao, tonical, vaniuz, vanmars, Vector, viniciusllima, vps_rj, Wenceslau, williamcmello, WiseNut, wylken e 1 visitante


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:
cron

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi