2014-09-21 9 views
5

कहा जाता है मेरे आवेदन में Android developer site द्वारा दिखाए गए संरचना के बाद बनाया गया एक सिंक एडाप्टर है। onPerformSync() विधि इंटरनेट से डेटा हो जाता है और डेटाबेस पर यह सम्मिलित करता है एक थोक डालने के साथ:onPerformSync() कई बार

Vector<ContentValues> cVVector = new Vector<ContentValues>(rssItems.size()); 

for(RssItem rssItem : rssItems) { 
    ContentValues newsValues = new ContentValues(); 
    // Get data from the remote server 
    // Fill all the values 
    newsValues.put(...); 
    // Add the values to a vector, at the end a BulkInsert will be called 
    cVVector.add(newsValues); 
} 
mContext.getContentResolver().bulkInsert(NewsEntry.CONTENT_URI, cvArray); 

डेटाबेस एक राजनीति ध्यान न दें जब संघर्षों के साथ सौदों:

final String SQL_CREATE_NEWS_TABLE = "CREATE TABLE " + NewsEntry.TABLE_NAME + " (" + 
       NewsEntry._ID + " INTEGER PRIMARY KEY," + 
       NewsEntry.COLUMN_NEWS_TITTLE + " TEXT UNIQUE NOT NULL, " + 
       NewsEntry.COLUMN_NEWS_CONTENT + " TEXT NOT NULL, " + 
       NewsEntry.COLUMN_NEWS_DESCRIPTION + " TEXT NOT NULL, " + 
       NewsEntry.COLUMN_NEWS_IMAGE + " TEXT, " + 
       NewsEntry.COLUMN_NEWS_DATE + " TEXT NOT NULL, " + 
       NewsEntry.COLUMN_NEWS_LINK + " TEXT NOT NULL, " + 
       "UNIQUE (" + NewsEntry.COLUMN_NEWS_TITTLE +") ON CONFLICT IGNORE"+ 
       ");"; 

और सिंक एडॉप्टर कॉन्फ़िगर किया गया है एक सिंक करने के लिए प्रत्येक 86400 सेकेंड

/** 
* Helper method to schedule the sync adapter periodic execution 
*/ 
public static void configurePeriodicSync(Context context, int syncInterval, int flexTime) { 
    Account account = getSyncAccount(context); 
    String authority = context.getString(R.string.content_authority); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     // we can enable inexact timers in our periodic sync 
     SyncRequest request = new SyncRequest.Builder(). 
       syncPeriodic(syncInterval, flexTime). 
       setSyncAdapter(account, authority).build(); 
     ContentResolver.requestSync(request); 
    } else { 
     ContentResolver.addPeriodicSync(account, 
       authority, new Bundle(), syncInterval); 
    } 
} 

हालांकि, इसे लगातार कहा जाता है।

उत्तर

0

onPerformSync() केवल तभी कॉल किया जाएगा जब इसे "requestSync" api का उपयोग करके मजबूर किया जाता है और एक बार खाली बंडल के साथ खाता निर्माण के समय।

0

मैं एक ही समस्या से फंस गया और आखिरकार मैंने पाया कि मैंने ContentResolver.requestSync() कई बार भी कहा (प्रत्येक onPerformSync() से पहले)। दूसरे शब्दों में, requestSync()onPerformSync() कॉल का कारण बनता है। यह मेरी गलती थी और मुझे तर्क पर पुनर्विचार करना चाहिए।

requestSync() लॉग इन करने का प्रयास करें और आपके द्वारा गलती मिल सकती है।

संबंधित मुद्दे