Почему нет доступа к переменной метода public static void

Не могу присвоить переменной myset значение из public static void loadIntoListView(String json) throws JSONException
Ошибка: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

public class RemoteClass  {

    public static String mysett;

    public static String getSettings(String urlSettings) {
        downloadJSON(urlSettings);
        return mysett;
    }

   public static void downloadJSON(final String urlWebService) {
          class DownloadJSON extends AsyncTask<Void, Void, String> {
          @Override
                protected void onPreExecute() {
                    super.onPreExecute();
                }
           @Override
                protected void onPostExecute(String s) {
                    super.onPostExecute(s);
                    // Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
                    try {
                        loadIntoListView(s);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                protected String doInBackground(Void... voids) {
                    try {
                        URL url = new URL(urlWebService);
                        HttpURLConnection con = (HttpURLConnection) url.openConnection();
                        StringBuilder sb = new StringBuilder();
                        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                        String json;

                        while ((json = bufferedReader.readLine()) != null) {
                            sb.append(json + "\n");
                        }
                        return sb.toString().trim();
                    } catch (Exception e) {
                        return "";
                    }
                }
            }
            DownloadJSON getJSON = new DownloadJSON();
            getJSON.execute();
        }
        public static  void loadIntoListView(String json) throws JSONException {
        mysett="0";
            JSONArray jsonArray = new JSONArray(json);
             for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject obj = jsonArray.getJSONObject(i);
         mysett = obj.getString("button_protected");
            }
        }
   }

Ответы (1 шт):

Автор решения: tosh17

Zafar, судя потому что вы пишете вы не соблюдаете синхроность.
В первый момент выполняли асинхронный запрос, и не дожидаясь его выполнения тут же запрашивали значение переменной. А так как она не была иннициализированна, то приложение падало с NPE. Сейчас вы переменную инициализировали, но проблема осталась. Если хотите использовать данный код, то вам нужно запускать следующую активность в методе onPostExecute.
Ну и если честно, то текущий код плох.
Во-первых не используйте AsyncTask, даже сам google просит это делать уже несколько лет, в этом году его официально прекратили его пометили как деприкейт. Для асинхроных запросов разберите корутины или rx. Если вы собираетесь и далее заниматься андроидом, поверьте это того стоит.
Во-вторых если вы просто пытаетесь получить json по url то почитайте про retrofit. Там достаточно просто и много готовых инструментов которые возьмут на себя и асинхронность и парсиг json

→ Ссылка