Залп добавить строку запроса из цикла курсора - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь сделать резервную копию данных контактов в MySQL через цикл курсора запроса, который передает значения в залповый синглтон.Мой код:

//global data variables
Cursor phones =null;

private String device_id;
private String name;
private String phone_number;
private String last_contacted;
private String times_contacted;
private String last_updated;
...
//contacts query code
phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection,"\"contact_last_updated_timestamp\">?",wrapStrToArray("1538523345522"), ContactsContract.Contacts.DISPLAY_NAME);

    while (phones.moveToNext())
    {
        name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        phone_number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        last_contacted = formatTimestamp(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LAST_TIME_CONTACTED)));
        times_contacted = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TIMES_CONTACTED));
        last_updated = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_LAST_UPDATED_TIMESTAMP));//use to synchronize without formatting

        saveContactToServer();

    }
    phones.close();// close cursor
...
//string request, add to queue code
    private void saveContactToServer() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_SAVE_CONTACT,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    try {
                        JSONObject obj = new JSONObject(response);
                        if (!obj.getBoolean("error")) {
                            //if there is a success
                            //storing the name to sqlite with status synced
                            saveContactToLocalStorage(device_id, name, phone_number, last_contacted, times_contacted, last_updated, CONTACT_SYNCED_WITH_SERVER);
                        } else {
                            //if there is some error
                            //saving the name to sqlite with status unsynced
                            saveContactToLocalStorage(device_id, name, phone_number, last_contacted, times_contacted, last_updated, CONTACT_NOT_SYNCED_WITH_SERVER);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                    //on error storing the name to sqlite with status unsynced
                    saveContactToLocalStorage(device_id, name, phone_number, last_contacted, times_contacted, last_updated, CONTACT_NOT_SYNCED_WITH_SERVER);
                }
            }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("device_id", device_id);
            params.put("name", name);
            params.put("phone_number", phone_number);
            params.put("last_contacted", last_contacted);
            params.put("times_contacted", times_contacted);
            params.put("last_updated", last_updated);
            return params;
        }
    };

    VolleySingleton.getInstance(this).addToRequestQueue(stringRequest);
}

Если я передаю курсор с одной записью, все работает как положено.Если я передаю данные из курсора с 4 записями, я получаю 4 вставки в базу данных, но все с данными из той же самой последней записи курсора.Я также попытался создать RequestQueue, как описано в https://developer.android.com/training/volley/requestqueue с тем же результатом, поэтому, пожалуйста, не пересылайте меня туда.Спасибо за любое предложение.

...