Получение значения SharedPreference в неактивном классе из фрагмента - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь получить доступ к SharedPreferences значениям в неактивном классе.Preferences определены и сохранены во фрагменте.Есть три значения, которые я получаю из панели поиска, по одному для каждого красного, зеленого и синего цвета.Панель поиска переходит от 0 до 255 и SharedPreferences работают, значение сохраняется при выходе из приложения.

Я пытаюсь получить значения в другом классе и затем отправить их с запросом POST, но я 'Я уверен, как получить их.Вы можете мне помочь?

Фрагмент:

public class SettingsFragment extends Fragment {

public static SharedPreferences preferences;
    public static SharedPreferences.Editor editor;

    public static final String RED_PROG = "RED_BAR";
    public static int redValue;

    public static final String GREEN_PROG = "GREEN_BAR";
    public static int greenValue;

    public static final String BLUE_PROG = "BLUE_BAR";
    public static int blueValue;

    public static final String DIMMER_PROG = "DIMMER_BAR";
    public static int dimmerValue;

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

        preferences = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);

        getRedBar();
        getGreenBar();
        getBlueBar();

        return view;
    }

    public void onResume() {
        super.onResume();

        redBar.setProgress(preferences.getInt(RED_PROG,0));
        greenBar.setProgress(preferences.getInt(GREEN_PROG,0));
        blueBar.setProgress(preferences.getInt(BLUE_PROG,0));
        dimmerBar.setProgress(preferences.getInt(DIMMER_PROG,0));
    }

    public void onPause() {
        super.onPause();

        editor = preferences.edit();

        redValue = redBar.getProgress();
        greenValue = greenBar.getProgress();
        blueValue = blueBar.getProgress();
        dimmerValue = dimmerBar.getProgress();

        editor.putInt(RED_PROG, redValue);
        editor.putInt(GREEN_PROG, greenValue);
        editor.putInt(BLUE_PROG, blueValue);
        editor.putInt(DIMMER_PROG, dimmerValue);

        editor.commit();
    }
}

Другой класс (значения цвета должны быть в RgbCapability с нулями):

public class ContextCommunication {

    public static void sendPref(){

      RgbCapability rgbCapability = new RgbCapability(0,0,0);
      Light light = new Light(true,rgbCapability, 0);
      Post post = new Post("Zagreb", light);

      Call<Post> call = MainActivity.apiService.savePost(post);

      textViewResult.setText(post.toString());

      call.enqueue(new Callback<Post>() {
          @Override
          public void onResponse(Call<Post> call, Response<Post> response) {

              if (!response.isSuccessful()) {
                  textViewResult.setText(response.code());
                  return;
              }

              Post postResponse = response.body();

              String content = "";
              content += "Code: " + response.code() + "\n";
              content += "location: " + postResponse.getLocation() + "\n";
              content += "light: " + postResponse.getLight() + "\n";


              //textViewResult.setText(content);
          }

          @Override
          public void onFailure(Call<Post> call, Throwable t) {
              textViewResult.setText(t.getMessage());
          }
      });
  }
}

Ответы [ 3 ]

0 голосов
/ 05 июля 2019

Я пытаюсь получить доступ к значениям SharedPreferences в классе неактивности

sharedPreferences = textViewResult.getContext().getSharedPreferences(preferences, 
Activity.MODE_PRIVATE);
int redValue=sharedPreferences.getInt(RED_PROG,0);
...

Если Context недоступен в методе sendPref, тогда передать его для доступа к экземпляру SharedPreferences.

Используйте apply() вместо commit(), если уровень API> 8

0 голосов
/ 05 июля 2019

Вы можете передать getContext () в качестве параметра из фрагмента в неактивный класс. Используя контекст, вы можете получить общие настройки.

public static void sendPref(Context context) {
    context.getSharedPreference..... 
}
0 голосов
/ 05 июля 2019

получить экземпляр из настроек

sharedPreferences = getActivity().getSharedPreferences(preferences, 
Activity.MODE_PRIVATE);

сохранить в настройках

sharedPreferences.edit().putBoolean(key, value).apply();

получить из предпочтений

sharedPreferences.getBoolean(key, defaultValue);
...