Http Ok3 возвращает два ответа - PullRequest
0 голосов
/ 18 февраля 2020

Я подключаю бэкэнд черного ящика, я не контролирую источник и не могу изменить бэкэнд, используя Ok Http 3. Но по какой-то причине я получаю два результата и не знаю, что происходит. Я подозреваю, что два потока становятся активными. Но я не знаю, как это остановить. Я пробовал синхронное и асинхронное соединение безрезультатно. Я новичок в Ok Http 3, поэтому я не уверен, что я делаю неправильно.

I/Results: {"TotalResultsCount":3,"Results":[{

I/Results: {"TotalResultsCount":24,"Results":[

Вот мой синхронный код

class CallBackendSync extends AsyncTask {

        OkHttpClient client = new OkHttpClient();
        JSONObject resultsObject = null;

        @Override
        protected Object doInBackground(Object [] objects) {
            String searchTerm = (String) objects[0];
            String url = (String) objects[1];
            String token = (String) objects[2];
            String results = "";

            //Search Body
            RequestBody searchBody = new FormBody.Builder()
                    .add("QueryText", searchTerm)
                    .add("Categories", "")
                    .add("ChargeOutPerMinuteFrom", "0")
                    .add("ChargeOutPerMinuteTo", "0")
                    .add("maxDistance", "0")
                    .add("longitude", "0")
                    .add("latitude", "0")
                    .add("page", "0")
                    .build();
            //Create request
            Request.Builder builder = new Request.Builder();
            builder.url(url);
            builder.addHeader("Accept", "application/json");
            if (token != null) {
                builder.addHeader("Authorization", token);
            }
            builder.post(searchBody);
            Request request = builder.build();
            try {
                Response response = client.newCall(request).execute();
                results = results + response.body().string();
                resultsObject = new JSONObject(results);
                Log.i("Results", results);
                return resultsObject;
            }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }

        protected void onPostExecute(String s){
            super.onPostExecute(s);
            displayResults(resultsObject);
        }
    }

Я вызываю бэкэнд из MainActivity, используя фрагмент кода ниже

CallBackendSync sync = new CallBackendSync();
        String [] params = {searchTerm, serverBaseUrl + url, accessToken};
        sync.execute(params);

Будем очень благодарны за любые идеи о том, что происходит не так.

...