4
我已經搜索了很多關於此,但無法找到任何解決方案。很長一段時間我一直在使用Volley來處理我的網絡通信。最近我決定使用SyncAdapter
將我的數據同步到服務器。在onPerformSync()
方法中,我想我將使用Volley將數據發送到服務器,因爲使用Volley很容易進行GET,POST請求。使用同步適配器排球
問題 - SyncAdapter
和Volley都使用他們自己的單獨線程。因此,當我從onPerformSync()
方法中啓動Volley請求時,SyncAdapter
不會等待Volley請求完成並在收到Volley的onResponse()
或onErrorResponse()
回調之前完成同步。在第一次通話成功返回後,我需要在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
等到網絡響應由排球收到?