Как хранить JSON данных в SharedPrefrence и получить доступ в автономном режиме - PullRequest
0 голосов
/ 28 апреля 2020

Как сохранить JSON в общем предпочтении и извлечь значение из локального, также стих обновляется каждый день, поэтому совместно используемому предпочтению также необходимо проверить в режиме онлайн обновленный контент о том, как реализовать этот

* 1002. * publi c класс VOTD_Data расширяет AsyncTask {
private String verseData = "";
private String dailyverse = "";
private String verseauthor = "";

private Context context;

public VOTD_Data(Context context){
    this.context = context;
}


@Override
protected Void doInBackground(Void... voids) {


    try {
        URL url = new URL("https://beta.ourmanna.com/api/v1/get/?format=json");

        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

        InputStream inputStream = httpURLConnection.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

        String line = "";

        while (line != null){

            line = bufferedReader.readLine();
            verseData  = verseData + line;
        }


        JSONObject mainObject = new JSONObject(verseData).getJSONObject("verse");
        JSONObject verseObject = mainObject.getJSONObject("details");



        dailyverse = verseObject.getString("text");
        verseauthor = verseObject.getString("reference");

        PreferenceManager
                .getDefaultSharedPreferences(context)
                .edit()
                .putString("dailyverse", dailyverse)
                .putString("verseauthor", verseauthor)
                .apply();


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

    return null;
}

@Override
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);

    Fragment_Home.dailyVerse.setText(this.dailyverse);
    Fragment_Home.verseAuthor.setText(this.verseauthor);

}
}

Домашний фрагмент

publi c класс Fragment_Home расширяет фрагмент {

    public static TextView dailyVerse;
    public static TextView verseAuthor;



    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_home, container, false);


        dailyVerse = (TextView) rootView.findViewById(R.id.daily_verse);
        verseAuthor = (TextView) rootView.findViewById(R.id.verse_author);


        //BindMethod
        fetchDailyVerseData();


        return rootView;
    }

    private void fetchDailyVerseData() {
//        VOTD_Data process = new VOTD_Data();
//        process.execute();

        new VOTD_Data(getContext()).execute();
    }


    @Override
    public void onResume() {
        super.onResume();
        requireActivity().setTitle("Home");
    }


    private class VOTD_DATA extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... voids) {
            PreferenceManager
                    .getDefaultSharedPreferences(getActivity())
                    .edit()
                    .putString("dailyverse", String.valueOf(dailyVerse))
                    .putString("verseauthor", String.valueOf(verseAuthor))
                    .apply();

            return null;

        }
    }

1 Ответ

1 голос
/ 29 апреля 2020

Вы можете сделать конструктор для передачи в контексте.

public class VOTD_Data extends AsyncTask<Void, Void, Void> {
    private SharedPreferences sharedPreferences;
    private String dailyverse;
    private String verseauthor;

    public VOTD_Data(Context context) {
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
        dailyverse = sharedPreferences.getString("dailyverse", "");
        verseauthor = sharedPreferences.getString("verseauthor", "");
    }

    @Override
    protected Void doInBackground(Void... voids) {
        try {
            ... // get dailyverse and verseauthor from network
            sharedPreferences
                .edit()
                .putString("dailyverse", dailyverse)
                .putString("verseauthor", verseauthor)
                .apply(); 
        } catch (IOException | JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void void) {
        Fragment_Home.dailyVerse.setText(dailyverse);
        Fragment_Home.verseAuthor.setText(verseauthor);
    }
}

В fetchDailyVerseData(), вызовите new VOTD_Data(getActivity()).execute();.

См. Android - Сохранение / получение строки с общими настройками

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...