OkHttp Асинхронный вызов, возвращающий JsonArray Null - PullRequest
0 голосов
/ 15 октября 2019

Я объявил глобальную переменную JSONArray для возврата в функцию okHttpCallback, но она возвращает ноль. Я получаю данные, но при их возврате ноль

JSONArray jsonArray; //Global in class

public JSONArray getJsonString(String link){

            okHttpClient.newCall(request).enqueue(new Callback() {

                @Override
                public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {

                    if(response.isSuccessful()){
                        try {

                            jsonArray = new JSONArray(response.body().string());

                        }catch (JSONException e){
                            e.printStackTrace();
                        }

                    }else{
                        Log.d("ERROR", "onResponse: ERROR" + response.body().string());
                    }
                }
            });


       return jsonArray; // Null Here

    }

1 Ответ

1 голос
/ 15 октября 2019

На самом деле сетевой вызов происходит в другом потоке, а вы возвращаете jsonArray в основном потоке. Вы должны возвращать jsonArray только тогда, когда получите ответ через ohttp. Вам следует сделать следующее: -

public void getJsonResponse(String link){

            okHttpClient.newCall(request).enqueue(new Callback() {

                @Override
                public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {

                    if(response.isSuccessful()){
                        try {

                            jsonArray = new JSONArray(response.body().string());
                            getJsonString(jsonArray);

                        }catch (JSONException e){
                            e.printStackTrace();
                        }

                    }else{
                        Log.d("ERROR", "onResponse: ERROR" + response.body().string());
                    }
                }
            });


    }

  // somewhere in class 

public JSONArray getJsonString(JSONArray jsonArr)
{
   return jsonArr;
}
...