Я много искал об этом, но не могу найти решение. Я использую Volley в течение длительного времени, чтобы обрабатывать сетевое общение. Недавно я решил использовать SyncAdapter
для синхронизации моих данных с сервером. Внутри метода onPerformSync()
я думал, что буду использовать Volley для отправки данных на сервер, так как очень легко с Volley сделать GET, POST-запросы.Использование Volley с адаптером синхронизации
Задача - SyncAdapter
и Volley оба используют свои собственные отдельные потоки. Поэтому, когда я инициирую запрос Volley изнутри метода onPerformSync()
, SyncAdapter
не дожидается завершения запроса Volley и завершения синхронизации до получения onResponse()
или onErrorResponse()
обратного вызова Volley. Мне нужно сделать дальнейшие сетевые вызовы внутри SyncAdapter
после успешного завершения первого вызова.
Пример кода -
@Override
public void onPerformSync(Account account, Bundle extras, String authority,
ContentProviderClient provider, SyncResult syncResult) {
JsonObjectRequest jReq = new JsonObjectRequest(Method.POST, url, data,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i(TAG, "response = " + response.toString());
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "error = " + error.getMessage());
}
});
AppController.getInstance().addToRequestQueue(jReq);
//onPerformSync() exits before request finished
}
Вопрос - Так как же я сделать SyncAdapter
подождать, пока сетевой ответ не будет получен Volley?