2017-11-06 5 views
0

Azure 모바일 서비스가 포함 된 Android 앱이 있고 오프라인 동기화가 구현되었습니다. 앱은 잘 작동하지만 데이터를 동기화 할 때 완료되지 않은 것처럼 보이므로 동기화되지 않은 테이블에 항상 행이 몇 개 있습니까?Android Azure 오프라인 동기화 - 동기화 완료 중

누구든지 문제가 무엇인지 알 수 있습니다. 나는 다음 시도에서 그것이 끝난 곳에서 끝내거나 틀렸다고 믿는다. 사전에

감사

답변

0

브루스의 답변은 괜찮지 만 피들러를 사용할 필요없이 약간 다른 방법을 사용했습니다.

나는이

mClient = new MobileServiceClient("[AZUREWEBSITE]", cntxall).withFilter(
         new ServiceFilter() { 
          @Override 
          public ListenableFuture<ServiceFilterResponse> handleRequest(ServiceFilterRequest request, NextServiceFilterCallback nextServiceFilter) { 
           // Get the request contents 
           String url = request.getUrl(); 
           String content = request.getContent(); 

           if (url != null) { 
            Log.d("Request URL:", url); 
           } 

           if (content != null) { 
            Log.d("Request Content:", content); 
           } 

           // Execute the next service filter in the chain 
           ListenableFuture<ServiceFilterResponse> responseFuture = nextServiceFilter.onNext(request); 

           Futures.addCallback(responseFuture, new FutureCallback<ServiceFilterResponse>() { 
            @Override 
            public void onFailure(Throwable e) { 
             Log.d("Exception:", e.getMessage()); 
            } 

            @Override 
            public void onSuccess(ServiceFilterResponse response) { 
             if (response != null && response.getContent() != null) { 
              Log.d("Response Content:", response.getContent()); 
             } 
            } 
           }); 

           return responseFuture; 
          } 
         } 
       ); 

mClient = new MobileServiceClient("[AZUREWEBSITE]", cntxall); 
       mClient.setAndroidHttpClientFactory(new MyOkHttpClientFactory()); 

에서 내 연결이 푸른 연결에 대한 로깅 방법과 로그에 요청을 보여줍니다을 변경합니다.

0

응용이 잘 작동 데이터를 동기화 할 때하지만 그렇게 항상 동기화되지 않은 테이블에 몇 행이 완료하지 않는 것 같다?

fiddler을 사용하여 동기화 작업을 처리 할 때 네트워크 추적을 캡처하는 것이 좋습니다. Incremental Sync를 들어

는 같은 것이다 요청은 다음과 같습니다

Get https://{your-app-name}.azurewebsites.net/tables/TodoItem?$filter=(updatedAt%20ge%20datetimeoffset'2017-11-03T06%3A56%3A44.4590000%2B00%3A00')&$orderby=updatedAt&$skip=0&$top=50&__includeDeleted=true 

증분 동기화 밖으로 탈퇴를 들어, 필터 updatedAt없이 모든 레코드를 검색합니다.

참고 : 항목이 너무 많은 경우 SDK는 관련 검색어와 일치하는 모든 항목을 관련 원격 테이블에서 가져 오기위한 여러 요청을 보냅니다. 또한 쿼리에 includeDeleted()을 지정해야합니다.

요약하면 위의 요청을 통해 모든 항목을 검색 할 수 있어야합니다. 또한, 풀 동작이 보류중인 로컬 업데이트를 갖는 경우, 풀 동작은 먼저 푸시 동작을 실행할 것이다. 따라서 충돌 해결 처리를 위해 pull 연산을 호출 할 때 예외를 잡을 수 있다고 가정합니다.