Как отправить все контакты в Mysql в Android Studio - PullRequest
0 голосов
/ 02 июня 2019

Я хочу отправить все контакты в MySQL в Android Studio.

Я использую этот код для получения контактов в цикле while:

ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);
        if (cur.getCount() > 0) {
            while (cur.moveToNext()) {
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                if (Integer.parseInt(cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                    Cursor pCur = cr.query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                            new String[]{id}, null);
                    while (pCur.moveToNext()) {
                        name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                        phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            HttpPOSTRequestWithParameters();
                    }
                    pCur.close();
                }
            }
        }

и использую этот код volly для POST-строки имени и номера телефона для сервера:

public void HttpPOSTRequestWithParameters() {
    RequestQueue queue = Volley.newRequestQueue(this);
    String url = "http://www.example.com/index.php";
    StringRequest postRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>()
            {
                @Override
                public void onResponse(String response) {
                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            }
    ) {
        @Override
        protected Map<String, String> getParams()
        {
            Map<String, String> params = new HashMap<String, String>();
            params.put("name", name);
            params.put("phone", phoneNo);
            return params;
        }
    };
    queue.add(postRequest);
}

Этот код отлично работает с небольшим количеством контактов, но когда число контактов велико, они не отправляют следующие предупреждения:

E / Volley: [13335] BasicNetwork.performRequest: Неожиданный код ответа503 для

Я думаю, что скорость отклика сервера низкая, а цикл while в беде.То есть перед получением ответа от серверной стороны он отправляет цикл следующей стороны на серверную часть, что вызывает проблему, заключающуюся в том, что некоторые числа не будут отправлены.

У меня вопрос, есть лилюбой способ оптимизировать приведенный выше код?Или поместить все имена и номера контактов в массив и отправить по запросу на стороне сервера?

...