2011-04-20 2 views
0

내 활동에 다음 코드하지 :ContentObserver은 삭제에 대한 알림을 받고 있지만, 삽입 또는 업데이트

Cursor mCursor = managedQuery(ActivityColumns.CONTENT_URI, PROJECTION, null, null, 
       getSortOrderStringFromSpinner()); 

     mCursor.registerContentObserver(new ContentObserver(new Handler()) 
     { 
      @Override 
      public void onChange(boolean selfChange) 
      { 
       ...snip...// breakpoint is set here     
      } 

      @Override 
      public boolean deliverSelfNotifications() 
      { 
       return true; 
      } 
     }); 

... 내가 내 데이터를 얻기 위해 사용하고있는 dataProvider 내의, 나는 알림을 설정하고 작업이 성공하면, 가입자는 통보 삽입, 삭제, 업데이트에,

c.setNotificationUri(getContext().getContentResolver(), uri); 

마지막 :

유형의 URI에 쿼리 방법 URI는 I를 쿼리하고

위의 줄에있는 notificationUri는 삽입/업데이트 또는 삭제되는 항목의 URI입니다.

"... snip ..."코드 줄에 중단 점을 설정하면 일부 레코드가 추가, 제거 및 업데이트됩니다. 삭제에 대해서는 알림 만 받지만 업데이트 나 삽입은 알리지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

문제는 내가 예상 한 것과 같습니다. 콘텐츠 관찰자가 삽입 또는 업데이트에 대한 업데이트를받지 못했습니다. 당시 상영 중지되었습니다. 내 응용 프로그램에서 레코드를 삽입하거나 업데이트하기 위해 사용자는 레코드를 편집하는 다른 활동을 시작하고 "제출"을 클릭합니다.

으로 저장 한 후 내가 알고하지 않았다 무엇

protected void onActivityResult (int requestCode, int resultCode, Intent data) 

에서 수행되고, 나는 문서 onActivityResult를가 있다는 것이다 읽을 때 나는 발견 : 활동이 시작되면

가 호출 종료하면, 시작한 requestCode, 리턴 된 resultCode 및 그로부터의 모든 추가 데이터를 제공합니다. 활동이 명시 적으로이를 리턴했거나, 결과를 리턴하지 않았거나, 조작 중에 크래시 된 경우 resultCode는 RESULT_CANCELED입니다.

활동이 다시 시작될 때 onResume() 바로 전에이 호출이 수신됩니다.

그래서 결론은 삽입 및 업데이트를 수행 할 때 활동이 활성화되지 않았기 때문에 삽입 또는 업데이트에 대한 알림을받지 못했다는 것입니다.

상황에 맞는 메뉴에서 "삭제"를 선택하면 내 응용 프로그램이 목록에서 항목을 삭제하기 때문에 삭제가 다릅니다. 활동은 전체 시간 동안 계속 활동합니다. 이 문제를 해결 않았다

0

아직 테스트가 더 필요하지만 커서 업데이트가 발생하면 알림을받지 못한 콘텐츠 관찰자와 함께 작업이 일시 중지 된 것으로 보입니다. 일시 중지 된 활동은 이벤트를 수신하지 않습니다. 내 생각에 ...

+2

즉 통지를 받았습니다? – Merlin

0

호출

getContext().getContentResolver().notifyChange(notificationUri, null); 

가 콘텐츠 관찰자에 대한 참조를 포함해야한다는

getContext().getContentResolver().notifyChange(notificationUri, MyContentObserver); 
관련 문제