문제

다음 이 가이드 에 Kinvey 웹사이트와 지금은 뭔가가 이것에서 내합니다.:

@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);
                }
            });
        }
    });
}

면 지금 전화는 온라인과 나는 응용 프로그램을 시작이 여러 번 나는 다음과 같은 출력:

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

하지만 만약 내가 비행기 모드를 활성화 시뮬레이션 오프라인 사용:

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

당신이 볼 수있는 AppData 을 얻지 않을 것이 최근에 저장된 엔터티를하는 동안,매월 또는 매년 오프라인입니다.내가 뭔가 잘못된 또는 이런 종류의 캐싱하지 않 가능한가요?

도움이 되었습니까?

해결책

저는 엔지니어 작업에서 안드로이드 라이브러리에서 Kinvey 고 당신을 도울 수 있습니다.

이런 일이기 때문에 타이밍 문제로,우리의 라이브러리는 실행되는 요청이 비동기적으로 수행됩니다.이는 것을 의미를 호출한 후 저장 저장이 발생하지 않는 즉시 대신에 스레드를 생성 및 저장 요청에서 실행됩니다.한번 실행이 완료되면,당신을 얻을 것이 onSuccess 콜백(또는 onFailure,뭔가 잘못되면).

그래서,당신은 몇 가지 옵션을 선택할 수 있습니다에 처리하는 방법이고,가장 일반적인 솔루션을 그냥 기다려 onSuccess 콜백의 그 첫 번째 저장--

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

    }
    ... 
}); 

위의 조각,저장 요청을 실행됩니다,그리고 이 작업이 완료되면 다음 얻을 실행됩니다.이 있는 경우 톤의 임베디드 호출을 다음과 같이 그것을 얻을 수 있 관리하기 어려운,그래서 라이브러리는 또한 동기(막기)구현이의 모든 방법들-그리고 당신 자신을 작성할 수 있습니다 AsyncTask 할 수 있는 함께 체인의 많은 차단하는 구현이 있습니다.

면 알려주는 감각!

----------------------------------후 편집:

OK,난 여기서 무슨 일이 벌어지고 있--문제는 Get 요청이 없는 쿼리(는 모든,당신이 무엇을 사용하여 위)는 여전히 기술적으로 쿼리,오프라인 지원하지 않 해결하기 위한 쿼리에서 클라이언트입니다.쿼리를 해결할 수 있는 서버에서,그리고 다음의 결과는 로컬로 저장하는 경우,그래서 그 쿼리가 반복되는 오프라인에서 그만 돌아가 이전 결과입니다.저는 이것을 설명하기 위해 여기:

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

는 모든 요청하는 동안,기술적으로 쿼리,해결할 수 있습여 클라이언트에서 그냥 돌아온 모든 행하는 오프라인으로 저장됩니다.그래서 저는 추가한 새로운 티켓을 잔고,추가 지원이 미래에!에 대한 감사,인내심과를 가리키는 것이 지원할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top