Как сформировать URL в фоновом потоке, прежде чем использовать его с API? - PullRequest
0 голосов
/ 25 ноября 2018

Я работаю с API в первый раз.

Мне нужно, чтобы мне нужно было сформировать URL с определенными параметрами, из которых один параметр не может быть сформирован в потоке основного пользовательского интерфейса и должен бытьсформирован в фоновом потоке.

Я планирую использовать библиотеку залпа для отправки запроса GET.

Я использую библиотеку Needle , которая помогает в выполнении фоновых задач,Это то, что я пробовал до сих пор.

Needle.onBackgroundThread().execute(new UiRelatedTask<String>() {
            @Override
            protected String doWork() {

                return url = GetUrl();
            }

            @Override
            protected void thenDoUiRelatedWork(String result1) {
                Log.e("JSON", url);
                final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null,
                        new Response.Listener() {
                            @Override
                            public void onResponse(Object response) {
                                Log.e("JSON", response.toString());
                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e("JSON", error.toString());
                    }
                });
                RequestQueue queue = VolleyController.getInstance(Activity.this.getApplicationContext()).getRequestQueue();
                queue.start();
                queue.add(jsonObjectRequest);
            }
        });

Но главная проблема в том, что после немедленного вызова метода GetUrl() вызывается метод thenDoUiRelatedWork, следовательно, запрос выполняется с использованием неверного URL в качестве URLбудет по-прежнему загружаться в фоновом режиме, а затем, когда загрузка URL-адреса закончится, я регистрирую URL-адрес, который является правильным.

Я не могу использовать AysncTask, так как мое приложение уже использует три AsyncTak и, кроме того, еще два могутбыть активирован пользователем на основе функции, которую он использует.А также запрос API должен выполняться в разных местах (3-4 места), поэтому использование AsyncTask не подойдет.

Может кто-нибудь помочь мне сначала полностью сформировать URL в фоновом режиме и использовать залпотправить запрос GET.

...