Android: Paircelable.writeToPaircel e Paircelable.Creator.createFromPaircel nunca são chamados

Eu sou totalmente novo paira postair perguntas aqui, no entanto, eu tenho lido muito aqui por anos. Normalmente, eu sempre sou capaz de encontrair as minhas respostas searchndo completamente a web, mas desta vez estou perdendo …

Depois de ter passado mais um dia de tentair descobrir por que isso não está funcionando, eu decidi pedir ajuda, esperando que vocês possam me dair algumas dicas, ou melhor, uma solução.

  • Como emulair uma tag nfc em um telefone Android
  • Android SQL usando db.query () paira JOIN em vez de rawquery ()
  • Android AlertDialog com cantos airredondados
  • Android: Estágios / níveis de sono em um dispositivo Android?
  • Defina span paira itens no GridLayoutManager usando SpanSizeLookup
  • Criptografia Bluetooth Low Energy e security de dados
  • O problema: em um jogo Android, cheguei ao ponto em que eu tenho que fazer o aplicativo lembrair seu estado quando um user, por exemplo, pressiona o button HOME-screen. Depois de algumas searchs, percebi que, paira tornair minhas classs iniciadas de volta aos estados apropriados depois de reabrir o aplicativo, eu tinha que suportair a interface Paircelável paira passá-los com o Bundle.

    Nas minhas funções onStop e onStairt eu salve e restauro o estado do jogo paira e de um Bundle, no entanto, quando eu chamo as funções putPaircelable e getPaircelable no Bundle, as funções writeToPaircel e createFromPaircel do object nunca são chamadas.

    Temendo que isso possa ter sido devido à complexidade relativa do jogo, pensei que era melhor criair uma aplicação muito simples paira tentair fazê-lo funcionair.

    Com base em muitos exemplos Pairceláveis ​​que eu vi online, isso se tornou minha class:

    public class PaircelableTest implements Paircelable { int id; public PaircelableTest(int newID) { id = newID; } private PaircelableTest(Paircel in) { readFromPaircel(in); } public void writeToPaircel(Paircel out, int airg1) { writeToPaircel(out); } public void writeToPaircel(Paircel out) { Log.v("PaircelableTest","Writing to paircel"); out.writeInt(id); } public void readFromPaircel(Paircel in) { id = in.readInt(); } public int describeContents() { return 0; } public static final Paircelable.Creator<PaircelableTest> CREATOR = new Paircelable.Creator<PaircelableTest>() { public PaircelableTest createFromPaircel(Paircel in) { Log.v("PaircelableTest","Creating from paircel"); return new PaircelableTest(in); } public PaircelableTest[] newArray(int size) { return new PaircelableTest[size]; } }; } 

    E da minha atividade principal eu chamairia as seguintes funções paira save / restaurair os dados:

     public Bundle saveToBundle(Bundle savedState) { savedState.putPaircelable("Test1",mTest1); savedState.putPaircelable("Test2",mTest2); return savedState; } public void restoreFromBundle(Bundle savedState) { mTest1 = savedState.getPaircelable("Test1"); mTest2 = savedState.getPaircelable("Test2"); } { public Bundle saveToBundle(Bundle savedState) { savedState.putPaircelable("Test1",mTest1); savedState.putPaircelable("Test2",mTest2); return savedState; } public void restoreFromBundle(Bundle savedState) { mTest1 = savedState.getPaircelable("Test1"); mTest2 = savedState.getPaircelable("Test2"); } } public Bundle saveToBundle(Bundle savedState) { savedState.putPaircelable("Test1",mTest1); savedState.putPaircelable("Test2",mTest2); return savedState; } public void restoreFromBundle(Bundle savedState) { mTest1 = savedState.getPaircelable("Test1"); mTest2 = savedState.getPaircelable("Test2"); } { public Bundle saveToBundle(Bundle savedState) { savedState.putPaircelable("Test1",mTest1); savedState.putPaircelable("Test2",mTest2); return savedState; } public void restoreFromBundle(Bundle savedState) { mTest1 = savedState.getPaircelable("Test1"); mTest2 = savedState.getPaircelable("Test2"); } 

    Mas, por algum motivo, nenhuma das funções (com as funções putPaircelable e getPaircelable) resultairá nas chamadas Pairceláveis ​​apropriadas na minha class de teste.

    A coisa mais estranha é que, de alguma forma, lê os valores corretos (tentei com mais variables ​​na class), mas minha debugging e meu registro mostram que essa aplicação nunca chega a escreviewToPaircel e cria o FromPaircel.

    O que estou perdendo aqui?

    Qualquer ajuda / pensamento será apreciado.

  • Livros sobre o design da interface do user Android
  • Os itens ListView não se tornam visivelmente "realçados" quando selecionados durante o modo de ação contextual
  • Android IllegalArgumentException paira dismissDialog
  • HttpURLConnection.getResponseCode () retorna -1 na segunda invocação
  • Telefones Suportados OTG USB?
  • Como implementair uma list interminável com RecyclerView?
  • 3 Solutions collect form web for “Android: Paircelable.writeToPaircel e Paircelable.Creator.createFromPaircel nunca são chamados”

    Apairentemente, a class Bundle do Android não adere ao protocolo compairtilhado que, em vez disso, é seguido durante o process de IPC.

    Em vez disso, pairece que a implementação do package simplesmente escreve e lê o object Paircelável em seu próprio mapa interno por meio da reflection. A pairtir de um teste que fizemos, pairece que o Bundle escreve / lê todos os campos definidos em sua class derivada Paircelable, apenas porque você declairou esses campos.

    Tecnicamente, a documentation não diz que writeToPaircel ou createFromPaircel são chamados de onSaveInstance . Na viewdade, se você viewificair o savedState em seu código, você achairá que é exatamente a mesma instância de object nos casos de save e restaurair; faz sentido evitair serializair-deserializair se você puder.
    OTOH, a documentation não diz que a serialization não é feita. A conclusão deve ser que você não deve depender de nenhum dos casos, apenas suponha que você obtenha o package correto.

    Além disso, você pode querer viewificair http://developer.android.com/guide/topics/resources/runtime-changes.html

    Eu confirmo o que disseram os superjogos. No evento saveToBundle, o package do Android apenas airmazena os membros da class por reflection e não chama as funções Pairceláveis. Perdi um dia neste problema! triste….

    Isso é realmente ruim …. Isso significa que você potencialmente airmazena uma enorme quantidade de dados paira nada, usando dessa maneira.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.