2

AbstractThreadedSyncAdapter를 사용하여 로컬 데이터베이스를 내 서버와 동기화하려고합니다. 내가 찾은 가이드를 따라 갔지만 작동시키지 못합니다. Android 2.2 용입니다.Android 데이터베이스를 AbstractThreadedSyncAdapter와 동기화하십시오. onPerformSync가 호출되지 않았습니다.

인증 시스템이 작동하고 있습니다.

Bundle params = new Bundle(); 
params.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false); 
params.putBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false); 
params.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false); 
ContentResolver.addPeriodicSync(account, "com.syncal.authority", params, 30); 
ContentResolver.setSyncAutomatically(account, "com.syncal.authority", true); 
ContentResolver.requestSync(account,"com.syncal.authority",params); 

내가 내 SyncService을 만들고 내 매니페스트에 선언 : 내 AccountAuthenticatorActivity에서 계정을 만든 후, 내가 할. 일부 기능 :

@Override 
public IBinder onBind(Intent intent) { 
    Log.i(TAG, "inBind() " + intent.getAction()); 
    return getSyncAdapter().getSyncAdapterBinder(); 
} 

private synchronized AbstractThreadedSyncAdapter getSyncAdapter() { 
    Log.i(TAG, "getSyncAdapter()"); 
    if (mSyncAdapter == null) { 
     mSyncAdapter = new SweetSyncAdapter(this, true); 
    } 
    return mSyncAdapter; 
} 

그리고 나서 SyncAdapter를 구현했습니다. onPerformSync 함수는 비어 있습니다. 단지 호출되었는지 여부를 알고 싶습니다. 호출되지 않습니다.

<service android:name=".sweet.SweetSyncService" android:exported="true" 
    android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.content.SyncAdapter" /> 
    </intent-filter> 

    <meta-data android:name="android.content.SyncAdapter" 
     android:resource="@xml/sync_adapter" /> 

</service> 

나는 심지어 내 자신의 컨텐트 프로를 (함수가 만들어 : 여기

<?xml version="1.0" encoding="utf-8"?> 
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" 
    android:contentAuthority="com.syncal.authority" 
    android:accountType="com.syncal.account" 
/> 

매니페스트의 서비스 부분 :

public class SweetSyncAdapter extends AbstractThreadedSyncAdapter { 

    Context mContext; 
    private String AUTH_TOKEN_TYPE; 
    private AccountManager mAccountManager; 
    private String mAuthToken; 
    private final String TAG = "SweetContactSync"; 
    static final String LAST_SYNC_KEY = "lastSync"; 

    public SweetSyncAdapter(Context context, boolean autoInitialize) { 
     super(context, autoInitialize); 
     Log.i(TAG, "SweetSyncAdapter"); 
     mContext = context; 
     AUTH_TOKEN_TYPE = mContext.getString(R.string.account_type); 
     mAccountManager = AccountManager.get(mContext); 
    } 

    public interface ISugarRunnable { 
     public void run() throws URISyntaxException, OperationCanceledException, AuthenticatorException, IOException, 
      AuthenticationException; 
    } 

    class SugarRunnable implements Runnable { 
     ISugarRunnable r; 
     Account mAccount; 
     SyncResult mSyncResult; 

     public SugarRunnable(Account acc, SyncResult syncResult, ISugarRunnable _r) { 
      r = _r; 
      mAccount = acc; 
      mSyncResult = syncResult; 
     } 

     public void run() { 
      try { 
       r.run(); 
    } catch ... //All the catchs 
     } 
    } 

    @Override 
    public void onPerformSync(final Account account, Bundle extras, String authority, 
       ContentProviderClient provider, SyncResult syncResult) { 
     Log.i(TAG, "onPerformSync()"); 
    } 
} 

내 XML/sync_adapter.xml는 다음과 같은 코드가 있습니다 비어있는, 그들은 단지 로그에 글을 쓴다.) 내가 따라 왔던 가이드가 필요하다고 말했고 나는 매니페스트에서도 그것을 선언했지만 아무 함수도 호출되지 않았기 때문에.

누군가 내 onPerformSync 기능이 호출되지 않는 이유를 알고 있습니까? 내 SweetSyncService의 onBind 함수가 호출되고 내 SweetSyncAdapter가 만들어 지지만 내 로그에는 여기에서 어떤 메시지도 표시되지 않습니다.

읽어 주셔서 감사합니다. 많은 코드를 입력했음을 알고 있지만 잠시 동안 작업 해 왔으며 해결할 수 없습니다.

+1

이 가이드에 대한 링크를 제공해도 될까요? :) –

+0

수퍼 클래스가 http://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html#getContext%28%29 (여전히 가능) 동안 Context (가능한 메모리 누수!)를 저장하는 이유는 무엇입니까? 메모리 누수!)? –

답변

2

나는 마침내 오류를 발견 할 수있었습니다. 내 매니페스트에 일부 사용 권한을 추가했는데 이제 작동합니다.

<uses-permission android:name="android.permission.READ_SYNC_STATS" /> 
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" /> 
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" /> 
관련 문제