我已经搜索了很多关于这个,但找不到任何解决方案.我一直在使用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 one rrorResponse(VolleyError error) { Log.e(TAG, "error = " + error.getMessage()); } }); AppController.getInstance().addToRequestQueue(jReq); //onPerformSync() exits before request finished }
问题 – 那么如何使SyncAdapter等到Volley收到网络响应?
解决方法:
发出同步截击请求.
RequestFuture<JsONObject> future = RequestFuture.newFuture();JsonObjectRequest request = new JsonObjectRequest(URL, null, future, future);requestQueue.add(request);
然后使用:
try { JsONObject response = future.get(); // this will block (forever)} catch (InterruptedException e) { // exception handling} catch (ExecutionException e) { // exception handling}
代码来自:Can I do a synchronous request with volley?
总结以上是内存溢出为你收集整理的android – 使用Volley和Sync Adapter全部内容,希望文章能够帮你解决android – 使用Volley和Sync Adapter所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)