Pergunta

Eu segui este guia no Kinvey site, e agora tem algo que esta em meu MainActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Client mKinveyClient = new Client.Builder(this.getApplicationContext()).build();
    final AsyncAppData<MyEntity> ad = mKinveyClient.appData("myCollection", MyEntity.class);
    ad.setCache(new InMemoryLRUCache(), CachePolicy.CACHEFIRST);
    ad.setOffline(OfflinePolicy.LOCAL_FIRST, new SqlLiteOfflineStore<MyEntity>(this));

    MyEntity event = new MyEntity();
    event.setName("Launch Party");
    event.setAddress("Kinvey HQ");

    ad.save(event, new KinveyClientCallback<MyEntity>() {
        @Override
        public void onFailure(Throwable e) {
            Log.e("TAG", "failed to save event data", e);
        }
        @Override
        public void onSuccess(MyEntity r) {
            Log.d("TAG", "saved data for entity "+ r.getName());

            ad.get(new KinveyListCallback<MyEntity>() {
                @Override
                public void onSuccess(MyEntity[] result) {
                    Log.v("TAG", "received "+ result.length + " events");
                }
                @Override
                public void onFailure(Throwable error) {
                    Log.e("TAG", "failed to fetch all", error);
                }
            });
        }
    });
}

Agora, se o telefone está online e eu faço iniciar o aplicativo várias vezes para obter o seguinte resultado:

V/TAG﹕ received 0 events
V/TAG﹕ received 1 events
V/TAG﹕ received 2 events
V/TAG﹕ received 3 events
...

Mas se eu ativar o modo de avião para simular o uso off-line:

V/TAG﹕ received 3 events
V/TAG﹕ received 3 events
V/TAG﹕ received 3 events
V/TAG﹕ received 3 events
...

Como você pode ver o AppData, não irá obter a salvo recentemente entidades, enquanto estando offline.Posso fazer algo errado ou é este tipo de colocação em cache não é possível?

Foi útil?

Solução

Eu sou um engenheiro a trabalhar no Android biblioteca Kinvey e pode ajudá-lo com um presente.

Isso está acontecendo devido a um problema de tempo, como a nossa biblioteca é a execução de pedidos de forma assíncrona.Isso significa que, após chamada a salvar, salvar não ocorrer imediatamente, em vez de um segmento é gerado e o guarde pedido é executado no plano de fundo.Uma vez que a execução foi concluída, você receberá o onSuccess de retorno de chamada (ou o onFailure, se algo der errado).

Então, você tem algumas opções sobre como lidar com isso, e a solução mais comum é só esperar para a onSuccess de retorno de chamada do primeiro save--

myweights.save(weight, new KinveyClientCallback<WeightEntity>() { 
    public void onSuccess(WeightEntity result){
        myweights.get(new KinveyListCallback<WeightEntity>() { 
            ... 
        }); 

    }
    ... 
}); 

Com o trecho acima, a salvar a solicitação será executada, e uma vez que esteja completa, em seguida, o get será executado.Se você tem uma tonelada de chamadas incorporado como este, ele pode ficar incontrolável, por isso a nossa biblioteca também tem síncrona (bloqueio) implementações de todos os métodos-e você pode escrever o seu próprio AsyncTask que pode encadear uma série de bloqueio de implementações.

Deixe-me saber se isso faz sentido!

----------------------------------Depois da edição:

OK, eu sei o que está acontecendo aqui-- o problema é que uma solicitação Get, sem consulta (um get todos, o que você está usando acima) ainda é, tecnicamente, uma consulta, e off-line não tem suporte para a resolução de consultas no cliente.Uma consulta pode ser resolvida no servidor e, em seguida, os resultados são guardados localmente, por isso, se a consulta é repetido enquanto off-line, ele só vai retornar aos resultados anteriores.Também tentei explicar isso aqui:

http://devcenter.kinvey.com/android/guides/caching-offline#Updatingthelocalstore

MAS

um obter todas pedido, embora tecnicamente uma consulta, pode ser resolvido com o cliente por apenas retornando a cada linha que é armazenados off-line.Assim, eu adicionei um novo bilhete para a lista de pendências, e vai adicionar suporte para isso no futuro!Obrigado pela sua paciência, e a indicação de que este pode ser suportada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top