Многократное выполнение запроса с таймером в Android - PullRequest
0 голосов
/ 26 мая 2020

Я ищу способ многократно запускать эту задачу со слушателем. Прямо сейчас это работает, но я ищу способ повторять это каждые 10 секунд.

Активность

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        VolleyRequest.makeRequest(this, URL, listenerResponse, listenerError);

    }

    private static final String URL = "https://naqil.ma/random.php";
    private Response.Listener<JSONObject> listenerResponse = new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            Toast.makeText(SecondActivity.this, "Resonse " + response.toString(), Toast.LENGTH_LONG).show();
        }
    };

    private Response.ErrorListener listenerError = new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(SecondActivity.this, "Error " + error, Toast.LENGTH_LONG).show();

        }

    };
}

Запрос на создание класса

public class VolleyRequest {
    public static void makeRequest(Context context, String url,
                                   Response.Listener<JSONObject> listenerResponse, Response.ErrorListener listenerError) {

        JsonObjectRequest requestWeather = new JsonObjectRequest(Request.Method.GET, url, null, listenerResponse,
                listenerError);
        Volley.newRequestQueue(context).add(requestWeather);

    }
}
````

1 Ответ

0 голосов
/ 26 мая 2020

(Адаптировано из этого ответа: { ссылка })

В основном используйте обработчик для перепланирования запроса каждые 10 секунд. Обработчик прикреплен к основному петлителю на основании его создания в onStart.

Сначала удалите VolleyRequest.makeRequest из onCreate.

Добавьте элементы в SecondActivity:

private Handler myHandler;
private Runnable myRunnable;

В onStart из SecondActivity:

protected void onStart() {
    super.onStart();

    // Start issuing VolleyRequests repeating every 10 seconds.
    myHandler = new Handler();
    myHandler.post(new Runnable() {
        @Override
        public void run() {
            SecondActivity.this.myRunnable = this;
            VolleyRequest.makeRequest(
                SecondActivity.this, 
                URL, 
                SecondActivity.this.listenerResponse, 
                SecondActivity.this.listenerError);
            SecondActivity.this.myHandler.postDelayed(this, 10000);

        }
    };
}

И остановить повторные запросы при остановке активности: в onStop из SecondActivity:

protected void onStop() {
    super.onStop();
    // check that it actually ran at least once - can't be null.
    if (myRunnable != null) {
        myHandler.removeCallbacks(myRunnable);
    }
}
...