Vic*_*cky 4 android retrofit android-intentservice retrofit2
我创建了一个IntentService,如下所示:
public class OrdersSyncService extends IntentService {
private static final String TAG = OrdersSyncService.class.getSimpleName();
private Order orderObject;
public OrdersSyncService() {
super("OrdersSyncService");
}
@Override
protected void onHandleIntent(Intent intent) {
//Util.showToast(getApplicationContext(), "Syncing Orders........");
Log.d(TAG, "I'm running....");
syncOrders();
}
private void syncOrders() {
Database database = CouchBaseHelper.openCouchBaseDB(this);
JSONArray ordersJsonArray = new JSONArray(CouchBaseHelper.retrieveNotSyncedOrders(database));
if (ordersJsonArray.length() != 0) {
uploadOrders(ordersJsonArray.toString());
Log.d(TAG, "Orders syncing started.");
} else {
Log.d(TAG, "Nothing to sync.");
}
}
private void uploadOrders(String ordersJsonArray) {
RetrofitApi.ApiInterface apiInterface = RetrofitApi.getApiInterfaceInstance();
final Call<Order> uploadOrders = apiInterface.uploadOrders(
ordersJsonArray,
Util.getDeviceId(this),
AppPreference.getString(this, AppPreference.USER_ID)
);
uploadOrders.enqueue(new Callback<Order>() {
@Override
public void onResponse(Call<Order> call, Response<Order> response) {
if (response.isSuccessful()) {
if (response.body().getStatus().equals("success")) {
orderObject = response.body();
Log.d(TAG, "Server Response : " + orderObject.getMobileOrderIds());
boolean flag = updateOrders(orderObject);
if (flag) {
Log.d(TAG, "Orders Synced And Updated.");
EventBus.getDefault().post(new SyncFinished(true));
} else {
Log.d(TAG, "Orders Synced But Update Failed.");
}
} else {
Log.d(TAG, response.body().getMessage());
}
} else {
Log.d(TAG, "Some Error. Sync Failed.");
}
}
@Override
public void onFailure(Call<Order> call, Throwable t) {
Log.d(TAG, "Network problem. Sync Failed.");
//Log.d("VICKY",call.request().url().toString());
}
});
}
private boolean updateOrders(Order order) {
Database database = CouchBaseHelper.openCouchBaseDB(this);
boolean flag = CouchBaseHelper.updateOrders(database, order);
return flag;
}
}
Run Code Online (Sandbox Code Playgroud)
它的作用是,它发出一个网络请求,并在网络请求之后用响应更新数据库(我使用的是couchbaselite for android).现在问题是当我向它发出多个请求时它并行执行.android文档明确指出: 创建后台服务
工作请求按顺序运行.如果某个操作在IntentService中运行,并且您向其发送另一个请求,则该请求将一直等到第一个操作完成.
我从onResumeActivity的方法调用此服务.因此,每当活动恢复时,都会调用此服务:
@Override
protected void onResume() {
super.onResume();
Intent ordersSyncServiceIntent = new Intent(SellerHomeActivity.this, OrdersSyncService.class);
startService(ordersSyncServiceIntent);
}
Run Code Online (Sandbox Code Playgroud)
我不知道问题是什么.我认为它与Retrofit库有关,我用它来制作异步的网络请求.请帮忙.
您在此行中异步执行此操作:
uploadOrders.enqueue(new Callback<Order>() {...});
Run Code Online (Sandbox Code Playgroud)
使用execute()方法同步执行.
| 归档时间: |
|
| 查看次数: |
2021 次 |
| 最近记录: |