Как вызвать класс из фрагмента

Я работаю над небольшим проектом, который сохраняет файл json в кеш устройства. На моем Home_fragmen я загружаю json из файла из Интернета, а также сохраняю файл.

JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONArray jsonArray = response.getJSONArray("photos");

                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject hit = jsonArray.getJSONObject(i);
                            String id = hit.getString("id");

                            mlist.add(new items(id));
                        }
                        mAdapter = new main_adapter(getActivity(), mlist);
                        mRecyclerView.setAdapter(mAdapter); 

                        // Cashing json file
                        jsonFile= response.toString();
                        cacheJson(jsonFile);
                        }

 private void cacheJson(String data) {
        try {
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(getActivity().openFileOutput("jsontxt.txt", Context.MODE_PRIVATE));
            outputStreamWriter.write(data);
            outputStreamWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Это код, который я использую для чтения данных из кеша.

private String readJson() {
        String jsonArray = "";

        try {
            InputStream inputStream = getActivity().openFileInput("jsontxt.txt");
            if ( inputStream != null) {
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                String receivingString = "";
                StringBuilder stringBuilder = new StringBuilder();

                while ((receivingString = bufferedReader.readLine()) != null) {
                    stringBuilder.append(receivingString);
                }
                inputStream.close();
                jsonArray = stringBuilder.toString();
            }
        } catch (FileNotFoundException e) {
            Log.e(TAG, "File not found: " + e.toString());
        } catch (IOException e) {
            Log.e(TAG, "Can not read file: " + e.toString());
        }

        return jsonArray;
    }

Вся эта работа над моим основным фрагментом, потому что там у всех есть все ... теперь я пытаюсь прочитать кеш из другого фрагмента новым фрагментом.

Я пробовал делать это, но не работает.

Home_fragment jsonFile = new Home_fragment ();
        String s = jsonFile.cachejson();
        Log.e(TAG, "JSON FILE: " + s);

Мой вопрос в том, как я могу прочитать доступ к readJson (), который находится в моем домашнем фрагменте, из вторичного фрагмента.

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

Ответы 2

Сделайте метод независимым от контекста (getActivity) фрагмента и передайте этот контекст в качестве параметра. А затем поместите этот метод на общий доступный объект из обоих фрагментов, после чего вы сможете получить к нему доступ из любого места.

Ответ принят как подходящий

Шаг 1: Во фрагменте 1 поместите свой результат json в Bundle

Bundle bundle = new Bundle();
bundle.putString("key","abc"); // Put anything what you want

Fragment_2 fragment2 = new Fragment_2();
fragment2.setArguments(bundle);

getFragmentManager()
      .beginTransaction()
      .replace(R.id.content, fragment2)
      .commit();

Шаг 2: Во фрагменте 2

Bundle bundle = this.getArguments();

if (bundle != null){
     // handle your code here.
}

Шаг 3 создать метод readjson как глобальный доступ для чтения аргументов пакета

public static String readJson(String jsonStr) {

        try {
            // put your code
            }
        } catch (FileNotFoundException e) {
            Log.e(TAG, "File not found: " + e.toString());
        } catch (IOException e) {
            Log.e(TAG, "Can not read file: " + e.toString());
        }

        return jsonArray;
    }

я надеюсь, что это поможет

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