GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Como Pegar GoogleSignAccount de um Parcelable?

Bom dia.
Fiquei perdido com esta situação, há o método getUser(), mas na classe HomeActivity.java diz que não há esta referência:

file:///home/leandro/Documentos/F%C3%B3runs/slide1.png

file:///home/leandro/Documentos/F%C3%B3runs/slide2.png

Mas account é do tipo Parcelable e não GoogleSignAccount. Qual a relação entre essas 2 classes?

Sim, account é um Parcelable e this.user é do tipo GoogleSigninAccount, então quero atribuir um objeto GoogleSignAccount ao this.user do HomeActivity.java retornado pelo getUser() do Parcelable.
Tentei algumas alterações mostradas no vídeo do Thiengo, mas não ficou claro ainda:

  package com.example.provados9;

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

import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.firebase.auth.FirebaseUser;

public class GoogleSigninParcelable implements Parcelable {
private GoogleSignInAccount user;

public GoogleSigninParcelable(GoogleSignInAccount user) {
    this.user = user;
}

public GoogleSigninParcelable(Parcel parcel) {
    this.user = (GoogleSignInAccount) parcel.readValue(GoogleSignInAccount.class.getClassLoader());
}

// protected GoogleSigninParcelable(Parcel in) {
// }

public void setUser(GoogleSignInAccount user) {
    this.user = user;
}

public static final Creator<GoogleSigninParcelable> CREATOR = new Creator<GoogleSigninParcelable>() {
    @Override
    public GoogleSigninParcelable createFromParcel(Parcel in) {
        return new GoogleSigninParcelable(in);
    }

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



@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeValue(user);
}

}

Essa interface Parcelable fornece qual método?


Vi aqui na documentação do android, e realmente essa interface não possui o método getUser(). Talvez há algum erro na modelagem dessas classes.

Eu implementei este método, pois em outras classes e interfaces, há esta possibilidade de adicionar quanto métodos forem necessários, mas nesta, parece não haver este recurso. Pelo que percebi, há um método estático herdada da classe mãe, o CREATOR e, parece ser por ele que teremos o retorno das propriedades de classe, no caso preciso da propriedade user, instância de GoogleSiginAccount, mas não mostra métodos de retorno quando recupero na outra Activity, apenas alguns os mesmos métodos de definição de transporte, antes de poder recuperar os dados na Activity destino.

Vc consegue depurar a linha onde está pegando o Parcelable e ver qual a instância que está sendo retornado? Na sua IDE, vc conseguirá ver qual o tipo da instância que está sendo “guardada” pela interface Parcelable (a variável account).

Eu já depurei, mas o problema é algo que ainda não está claro para mim sobre o Parcelable. Farei mais alguns testes.


Era algo muito besta, man, ao invés de eu usar o nome da minha classe que implementa Parcelable, eu estava usando a própria classe Parcelable para definir o tipo de “userParcelable” (antes era a variável account). Resolvido. Muito obrigado pela atenção.

1 Curtida
//