如何在工作管理器中使用改造功能,以将一些本地消息逐一发布到服务器?

问题描述 投票:0回答:1

在我的聊天应用程序中,我想从本地数据库中读取消息,并由工作经理将其发送到服务器,并在用户发送新消息时进行改进。

在父母中:

 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) {
                }

            });
}

现在问题是:

  1. 如何在进行改造的同时在doWork方法中返回一些结果?

  2. 如果已经呼叫该工作人员并且正在进行改型并再次呼叫该工作人员怎么办?

  3. 我如何将消息接连发送到服务器?

谢谢

android retrofit rx-java android-workmanager
1个回答
0
投票

[请在您能够解决此问题的地方,让我知道您的操作方式

© www.soinside.com 2019 - 2024. All rights reserved.