Skip to content
Advertisement

Resend Retrofit API call with a OneTimeWorkRequest

I am stuck and can’t get my OneTimeWorkRequest to work properly.

I have got this Retrofit API call I want to resend to the backend incase there’s no network connectivity or similar on the phone. What I can’t wrap my head around is how to pass the call to the worker.

I’ve got this following code:

Here’s the API Service:

public void sendMessage(Context context, Message message){

    ListService listService = ServiceBuilder.getInstance(context).buildService(ListService.class);
    Call<Void> createRequest = listService.sendMessage(message);

    createRequest.enqueue(new Callback<Void>() {

        @Override
        public void onResponse(Call<Void> call, Response<Void> response) {
            if(response.isSuccessful()) {
                Toast toast = new Toast(context);
                toast.setText("Thank you for your message!");
                toast.show();

            }
            else{
                Toast toast = new Toast(context);
                toast.setText("Could not send message!");
                toast.show();
            }
        }

        @Override
        public void onFailure(Call<Void> call, Throwable t) {
            Toast toast = new Toast(context);
            toast.setText("Could not send message!");
            toast.show();
        }
    });
}

The worker in the main class:

Constraints constraints4 = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();

OneTimeWorkRequest sendFeedbackWorker = new OneTimeWorkRequest.Builder(SendMessageWorker.class)
.setInitialDelay(15, TimeUnit.MINUTES)
.setConstraints(constraints4)
.build();
WorkManager.getInstance().enqueue(sendMessageWorker);

The worker class:

public class SendMessageWorker extends Worker {
    private static final String TAG = "SendMessageWorker";

    public SendMessageWorker(
            @NonNull
                    Context context,
            @NonNull
                    WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @NonNull
    @NotNull
    @Override
    public Result doWork() {

        //What do I do here?
        
        return Result.success();
    }
}

What am I missing, is it just the Worker class? And is it the application context I need in there? If so, how do I pass it?

Advertisement

Answer

I put all info in as putStrings, converted the date.

Data myFeedbackMessage = new Data.Builder()
                .putString("myFeedbackMessageId", message.getId())
                .putString("myFeedbackMessage", message.getFeedbackMessage())
                .putString("myFeedbackPerson", message.getFeedbackPersonName())
                .putString("myFeedbackCreated",message.getCreated().toString())
                .build();
User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement