В моем приложении чата я хочу читать сообщения из локальной базы данных и отправлять их на сервер с помощью диспетчера работ, а также модифицировать, когда пользователь отправляет новые сообщения.
в родительском:
OneTimeWorkRequest workRequest = new OneTimeWorkRequest
.Builder(SendMsg_Work.class)
.setConstraints(new Constraints
.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build())
.setInitialDelay(5, TimeUnit.SECONDS)
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 30, TimeUnit.SECONDS)
.build();
WorkManager.getInstance().enqueue(workRequest);
у работника:
@NonNull
@Override
public Result doWork() {
ChatRoom_Model_Local ll = database.get_unSendMsg();
if (ll != null) {
sendMessage(ll);
} else {
return Result.failure();
}
}
и дооснащение - я тоже использую RxJava:
private void sendMessage(ChatRoom_Model_Local model) {
Single<Response<MSG_Response>> api = ApiClient.createService(ApiInterface.class, pr.getData(pr.SendMessage_url))
.sendMSG(pr.getData(pr.MY_TOKEN), model.getOther_user(), model.getMsg_text());
api.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<Response<MSG_Response>>() {
@Override
public void onSubscribe(Disposable d) { }
@Override
public void onSuccess(Response<MSG_Response> response) {
if (response.isSuccessful() && response.body() != null) {
String message = response.body().getMessage();
Intent bi = new Intent(new Config().getCHAT_SERVICE());
if (message != null && message.equals("xyx")) { // INSERT Successfully
String server_id = response.body().getId();
String localId = response.body().getIdLocal();
bi.putExtra("ChatRoomService_id", localId);
bi.putExtra("ChatRoomService_s_id",server_id);
int result = database.setMsgServerId(localId,server_id);
}
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(bi);
}
ChatRoom_Model_Local ll = database.get_unSendMsg();
if (ll != null) {
sendMessage(ll);
}
}
@Override
public void onError(Throwable e) {
}
});
}
Теперь проблема:
Как вернуть какой-либо Result в метод doWork, пока продолжается модернизация?
Что, если рабочий уже вызван, и выполняется модернизация, и рабочий вызывается снова?
Как я могу отправлять сообщения одно за другим на сервер?
Спасибо