【发布时间】:2014-09-03 04:10:33
【问题描述】:
我正在尝试使用 ContentProvider 和 SyncAdapter,我设置了所有文件,一切正常。我实际上在做的是,我正在使用同步适配器将数据发送到我的服务器,但我希望它在发送后将其删除,但相反,它会不断重复发送数据,直到它收到此错误并崩溃:
09-02 21:34:57.207: E/dalvikvm-heap(8505): Generating hprof for process: com.deliveryscience.track:sync PID: 8505
09-02 21:35:12.113: E/dalvikvm(8505): can't open /data/misc/app_oom.hprof: Permission denied
09-02 21:35:12.183: E/dalvikvm-heap(8505): hprofDumpHeap failed with result: -1
09-02 21:35:12.183: E/dalvikvm-heap(8505): After hprofDumpHeap for process
09-02 21:35:12.183: E/dalvikvm(8505): Out of memory: Heap Size=196608KB, Allocated=189573KB, Limit=196608KB, Proc Limit=196608KB
09-02 21:35:12.193: E/dalvikvm(8505): Extra info: Footprint=195472KB, Allowed Footprint=196608KB, Trimmed=16KB
下面也是我的代码,我只想让它循环并删除数据库中循环的每一行。
public void sendData(ContentProviderClient provider){
Uri uri = Uri.parse("content://com.example.track.services/ds");
Log.d("Uri Url:", uri.toString());
try {
Log.e("Oya:", "I'm here in the sync");
final Cursor cursor = provider.query(uri, null, "", null, "");
//cursor
int j = cursor.getCount();
if (cursor.getCount() == 0) {
Account newAccount = new Account("dummyAcct", "com.example.track");
AccountManager mgr = (AccountManager) getContext().getSystemService(Context.ACCOUNT_SERVICE);
// If the account already exists no harm is done but
// a warning will be logged.
mgr.addAccountExplicitly(newAccount, null, null);
int syncOnOff = 0;
ContentResolver.setIsSyncable(newAccount, "com.example.track.services", syncOnOff);
}else {
Log.w("colum", String.valueOf(cursor.getCount()));
if (cursor.moveToFirst()) {
do {
String link = cursor.getString(cursor.getColumnIndex("token_id"));
String URL_Update = "http://dev.tracking.co/locations/add.json?token=" + link;
Log.d("Sync Url:", URL_Update);
StringRequest req = new StringRequest(Request.Method.POST ,URL_Update,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// TODO Auto-generated method stub
Log.e("str Response:", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
params.put("device_id",cursor.getString(cursor.getColumnIndex("device_id")));
params.put("latitude",cursor.getString(cursor.getColumnIndex("lat")));
params.put("longitude", cursor.getString(cursor.getColumnIndex("long")));
params.put("time", cursor.getString(cursor.getColumnIndex("time")));
Log.d("Parameter", params.toString());
return params;
}
};
AppController.getInstance().addToRequestQueue(req);
//Uri id = Uri.parse(cursor.getString(cursor.getColumnIndex(MyContract._ID)));
//provider.delete(id, null, null);
cursor.moveToNext();
} while (cursor.moveToLast());
}
}
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
另外,如何将 3 个内容提供程序附加到一个同步适配器。而且,在我手机的同步部分查看我的应用程序,它只允许“删除”,“立即同步”选项被禁用,但如果我按下通用同步按钮,它会同步
【问题讨论】:
标签: android android-contentprovider android-syncadapter