SwipeRefreshLayout загружается навсегда и не выполняет свою миссию по отправке запроса

Я сделал очень простой код, который предполагает загрузку json, когда пользователь обновляет страницу, все, что я написал, работает в других местах, но не в setOnRefreshListener.

Вот код:

swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {


            Log.d("serviceAs2", "onHandleIntent secondservice called");
            SharedPreferences logInDataSP =getSharedPreferences("LocalLogInData", 0);
            SharedPreferences sp=getSharedPreferences("JsonData", 0);
            SharedPreferences.Editor editor = sp.edit();
            try {



                Log.d("serviceAs22", "onHandleIntent secondservice called");
                Log.d("serviceAs22", toLoad);

                HttpHandler sh = new HttpHandler();
                String jsonStr  = "a";

                if (toLoad == "kinderGarden"){
                    jsonStr = sh.makeServiceCall(getString(R.string.UrlKinderGarden));
                    editor.putString("JsonKG", jsonStr);}

                if (toLoad == "fourthGrade") {
                jsonStr = sh.makeServiceCall(getString(R.string.UrlFourthGrade));
                editor.putString("JsonFG", jsonStr);}

                if (toLoad == "seventhGrade"){
                    Log.d("serviceAs22", toLoad + "sfsf");
                jsonStr = sh.makeServiceCall(getString(R.string.UrlSeventhGrade));
                editor.putString("JsonSG", jsonStr);}

                if (toLoad == "tenthGrade"){
                jsonStr = sh.makeServiceCall(getString(R.string.UrlTenthGrade));
                editor.putString("JsonTG", jsonStr);}

                if (toLoad == "gameLibrary") {
                jsonStr = sh.makeServiceCall(getString(R.string.UrlGamesLibrary));
                editor.putString("JsonGL", jsonStr);}

                if (toLoad == "summerCamps") {
                    jsonStr = sh.makeServiceCall(getString(R.string.UrlSummerCamps));
                    editor.putString("JsonSC", jsonStr);
                }

                if (toLoad == "trompim"){
                jsonStr = sh.makeServiceCall(getString(R.string.UrlTrompim));
                editor.putString("JsonT", jsonStr);}

                if (toLoad == "pinukim"){
                jsonStr = sh.makeServiceCall(getString(R.string.UrlPinukim));
                editor.putString("JsonP", jsonStr);}

                editor.commit();

                Log.d("Nugi2626", jsonStr);
            } catch (Exception e) {
                // TODO: handle exception
            }
            swipeRefreshLayout.destroyDrawingCache();;

        }
    });

и вот HttpHandler:

public class HttpHandler {

private static final String TAG = HttpHandler.class.getSimpleName();

public HttpHandler() {
}

public String makeServiceCall(String reqUrl) {
    String response = null;
    try {
        URL url = new URL(reqUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        // read the response
        InputStream in = new BufferedInputStream(conn.getInputStream());
        response = convertStreamToString(in);
    } catch (MalformedURLException e) {
        Log.e(TAG, "MalformedURLException: " + e.getMessage());
    } catch (ProtocolException e) {
        Log.e(TAG, "ProtocolException: " + e.getMessage());
    } catch (IOException e) {
        Log.e(TAG, "IOException: " + e.getMessage());
    } catch (Exception e) {
        Log.e(TAG, "Exception: " + e.getMessage());
    }
    return response;
}

private String convertStreamToString(InputStream is) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line).append('\n');
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}
}

Я не могу придумать ничего, что могло бы привести к его неработоспособности, поскольку я использую те же самые операции в intentService, и он работает и работал безупречно миллиард раз. Вы, ребята, знаете, что могло случиться? Спасибо!

Прежде всего, вы выполняете сетевой запрос в MainThread - он должен выполняться в фоновом потоке, а результат должен быть размещен в MainThread. После получения результата сетевого запроса необходимо вызвать в RefreshLayout#setRefreshing(boolean) (developer.android.com/reference/android/support/v4/widget/…‌)

ConstOrVar 01.11.2018 18:49

и как я могу это сделать без asyncTask? благодарю вас!

amir Asaf 01.11.2018 19:26

есть много способов: AsyncTask, AsyncLoader, IntentService, RxJava, ThreadPoolExecutor - вы можете выбрать те, которые вам нужны

ConstOrVar 01.11.2018 19:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
27
1

Ответы 1

спасибо всем, решение действительно заключалось в том, чтобы обернуть его потоком:

Thread thread = new Thread() {
                String jsonStr  = "a";
                @Override
                public void run() {

                    Log.d("serviceAs2", "onHandleIntent secondservice called");
                    SharedPreferences.Editor editor = sp.edit();
                    arrayListMain=null;
                    finalLvPos=10;

                    try {



                        Log.d("serviceAs22", "onHandleIntent secondservice called");
                        Log.d("serviceAs22", toLoad);

                        sh = new HttpHandler();

                        if (toLoad == "kinderGarden"){
                            Log.d("serviceAs22", toLoad + "sfsf");
                            jsonStr = sh.makeServiceCall(getString(R.string.UrlKinderGarden));
                            editor.putString("JsonKG", jsonStr);
                        }

                        if (toLoad.matches("fourthGrade")) {
                            jsonStr = sh.makeServiceCall(getString(R.string.UrlFourthGrade));
                            editor.putString("JsonFG", jsonStr);
                        }

                        if (toLoad == "seventhGrade"){
                            Log.d("serviceAs22", toLoad + "sfsf");
                            jsonStr = sh.makeServiceCall(getString(R.string.UrlSeventhGrade));
                            editor.putString("JsonSG", jsonStr);}

                        if (toLoad == "tenthGrade")
                        {
                            Log.d("serviceAs22", toLoad + "sfsf");
                            jsonStr = sh.makeServiceCall(getString(R.string.UrlTenthGrade));
                            editor.putString("JsonTG", jsonStr);
                        }

                        if (toLoad == "gameLibrary") {
                            Log.d("serviceAs22", toLoad + "sfsf");
                            jsonStr = sh.makeServiceCall(getString(R.string.UrlGamesLibrary));
                            editor.putString("JsonGL", jsonStr);
                            Log.d("serviceAs22", toLoad + "sfsf");}

                        if (toLoad == "summerCamps") {
                            jsonStr = sh.makeServiceCall(getString(R.string.UrlSummerCamps));
                            editor.putString("JsonSC", jsonStr);
                        }

                        if (toLoad == "trompim"){
                            jsonStr = sh.makeServiceCall(getString(R.string.UrlTrompim));
                            editor.putString("JsonT", jsonStr);}

                        if (toLoad == "pinukim"){
                            jsonStr = sh.makeServiceCall(getString(R.string.UrlPinukim));
                            editor.putString("JsonP", jsonStr);}
                        editor.commit();


                        Log.d("Nugi2626", jsonStr);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }

}; и сразу после этого начать обсуждение.

Другие вопросы по теме