Anonymous
Диспетчер работ: как вернуть результат только после выполнения сетевого запроса
Сообщение
Anonymous » 26 ноя 2025, 20:41
Это мой рабочий класс, и я попробовал его, но, похоже, он работает не так, как я хочу. Я хочу вернуть результат doWork() только после выполнения запроса PUT. Будем благодарны за любую помощь, спасибо.
Код: Выделить всё
public class MyWorker extends Worker {
private Context context;
public MyWorker(
@NonNull Context context,
@NonNull WorkerParameters params) {
super(context, params);
this.context = context;
}
@NonNull
@Override
public Result doWork() {
return putData();
}
private Result putData() {
final Result[] result = new Result[1];
String url = "https://www.myurl.com";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(Request.Method.PUT, url, null, new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
if(response == null)
result[0] = Result.retry();
else
result[0] = Result.success();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle error
if (error instanceof TimeoutError || error instanceof NoConnectionError) {
result[0] = Result.retry();
} else if (error instanceof AuthFailureError) {
//TODO
} else if (error instanceof ServerError) {
//TODO
result[0] = Result.retry();
} else if (error instanceof NetworkError) {
//TODO
result[0] = Result.retry();
} else if (error instanceof ParseError) {
//TODO
}
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
}
}) {
@Override
public Map getHeaders() throws AuthFailureError {
return params;
}
@Override
protected Map getParams() throws AuthFailureError {
return super.getParams();
}
};
VolleyHelper.getInstance(context).addToRequestQueue(jsonObjectRequest);
return result[0];
}
Подробнее здесь:
https://stackoverflow.com/questions/594 ... st-is-done
1764178880
Anonymous
Это мой рабочий класс, и я попробовал его, но, похоже, он работает не так, как я хочу. Я хочу вернуть результат doWork() только после выполнения запроса PUT. Будем благодарны за любую помощь, спасибо. [code]public class MyWorker extends Worker { private Context context; public MyWorker( @NonNull Context context, @NonNull WorkerParameters params) { super(context, params); this.context = context; } @NonNull @Override public Result doWork() { return putData(); } private Result putData() { final Result[] result = new Result[1]; String url = "https://www.myurl.com"; JsonObjectRequest jsonObjectRequest = new JsonObjectRequest (Request.Method.PUT, url, null, new Response.Listener() { @Override public void onResponse(JSONObject response) { if(response == null) result[0] = Result.retry(); else result[0] = Result.success(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO: Handle error if (error instanceof TimeoutError || error instanceof NoConnectionError) { result[0] = Result.retry(); } else if (error instanceof AuthFailureError) { //TODO } else if (error instanceof ServerError) { //TODO result[0] = Result.retry(); } else if (error instanceof NetworkError) { //TODO result[0] = Result.retry(); } else if (error instanceof ParseError) { //TODO } Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); } }) { @Override public Map getHeaders() throws AuthFailureError { return params; } @Override protected Map getParams() throws AuthFailureError { return super.getParams(); } }; VolleyHelper.getInstance(context).addToRequestQueue(jsonObjectRequest); return result[0]; } [/code] Подробнее здесь: [url]https://stackoverflow.com/questions/59408932/work-manager-how-to-return-result-only-when-network-request-is-done[/url]