Как обновить значение статического контекста, сохраненное из общих настроек? - PullRequest
1 голос
/ 20 апреля 2019

Я планирую внедрить пасхальное яйцо, чтобы изменить мой API через alertdialog, но в настоящее время после того, как я изменяю свою конечную точку URL и отправляю ее, она сохраняет ее в общих настройках, но в следующий раз я сохраняю он сохраняет его в общих настройках , но не отражается в приложении. Как мне сделать так, чтобы каждый раз, когда я менял его, он относился к моему apiendpoint, как и ожидалось:

Alertdialog, который срабатывает на 5 нажатий:

    myimage.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      long time= System.currentTimeMillis();


                      //if it is the first time, or if it has been more than 3 seconds since the first tap ( so it is like a new try), we reset everything
                      if (startMillis==0 || (time-startMillis> 3000) ) {
                          startMillis=time;
                          count=1;
                      }
                      //it is not the first, and it has been  less than 3 seconds since the first
                      else{ //  time-startMillis< 3000
                          count++;
                      }

                      if (count==5) {
                          final AlertDialog dialogBuilder = new AlertDialog.Builder(LoginActivity.this).create();
                          LayoutInflater inflater = LoginActivity.this.getLayoutInflater();
                          View dialogView = inflater.inflate(R.layout.custom_dialog, null);

                          final EditText editText = (EditText) dialogView.findViewById(R.id.edt_comment);
                          Button submitButton = (Button) dialogView.findViewById(R.id.buttonSubmit);
                          Button cancelButton = (Button) dialogView.findViewById(R.id.buttonCancel);
                          Button resetButton = (Button) dialogView.findViewById(R.id.buttonReset);
                          editText.setTextColor(getResources().getColor(R.color.black,null));
                          if(SharedPreferencesHelper.getSomeStringValue(getApplicationContext()) != null) {
                              editText.setText( SharedPreferencesHelper.getSomeStringValue(getApplicationContext()));
                          }

                          cancelButton.setOnClickListener(new View.OnClickListener() {
                              @Override
                              public void onClick(View view) {

                                  dialogBuilder.dismiss();
                              }
                          });
                          submitButton.setOnClickListener(new View.OnClickListener() {
                              @Override
                              public void onClick(View view) {
                                  //save the endpoint value in shared preferences
SharedPreferencesHelper.setSomeStringValue(getApplicationContext(),editText.getText().toString());


                                  dialogBuilder.dismiss();
                              }
                          });
                          resetButton.setOnClickListener(new View.OnClickListener() {
                              @Override
                              public void onClick(View v) {
                                  SharedPreferencesHelper.setSomeStringValue(getApplicationContext(),BuildConfig.BASE_URL);

                                  dialogBuilder.dismiss();

                              }
                          });

                          dialogBuilder.setView(dialogView);
                          dialogBuilder.setCanceledOnTouchOutside(false);
                          dialogBuilder.show();
                      }
                  }



        });

Вот мой sharedpreferenceshelper :

public class SharedPreferencesHelper {

    private static final String APP_SETTINGS = "APP_SETTINGS";


    // properties
    private static final String SOME_STRING_VALUE = "SOME_STRING_VALUE";
    // other properties...


    private SharedPreferencesHelper() {}

    private static SharedPreferences getSharedPreferences(Context context) {
        return context.getSharedPreferences(APP_SETTINGS, Context.MODE_PRIVATE);
    }

    public static String getSomeStringValue(Context context) {
        return getSharedPreferences(context).getString(SOME_STRING_VALUE , null);
    }

    public static void setSomeStringValue(Context context, String newValue) {
        final SharedPreferences.Editor editor = getSharedPreferences(context).edit();
        editor.putString(SOME_STRING_VALUE , newValue);
        editor.apply();
    }

}

Наконец, вот мой Apiendpoint class:

final class ApiEndPoint {
 private static String NEW_URL = SharedPreferencesHelper.getSomeStringValue(MyApp.getAppContext());
    static final String ENDPOINT_SERVER_LOGIN = NEW_URL
            + "/service-myverification-link/v1/link/verify";

    private ApiEndPoint() {
        // This class is not publicly instantiable
    }
}

Для приведенного выше кода мне было интересно, как сделать ссылку NEW_URL более динамичной, похоже, что она придерживается значения, сохраненного в первый раз, и не меняется после. Мне нужно сохранить эту ссылку в статическом состоянии из-за:

 @Override
    public Single<LoginResponse> doServerLoginApiCall(LoginRequest request) {
            return Rx2AndroidNetworking.post(ApiEndPoint.ENDPOINT_SERVER_LOGIN)
                    .doNotCacheResponse()
                    .addBodyParameter(request)
                    .build()
                    .getObjectSingle(LoginResponse.class);

    }

Есть идеи, как мне это исправить, чтобы я мог обновлять ссылку в NEW_URL каждый раз, когда она придерживается нового значения вместо значения, сохраненного в первый раз?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Почему бы вам не отправлять URL в качестве параметра каждый раз:

@Override
    public Single<LoginResponse> doServerLoginApiCall(LoginRequest request, String url) {
            return Rx2AndroidNetworking.post(url)
                    .doNotCacheResponse()
                    .addBodyParameter(request)
                    .build()
                    .getObjectSingle(LoginResponse.class);
    }

Вызов метода:

doServerLoginApiCall(request, SharedPreferencesHelper.getSomeStringValue(getApplicationContext()) + ENDPOINT);
0 голосов
/ 20 апреля 2019

Вам нужно будет использовать onSharedPreferenceChangeListener

 SharedPreferencesHelper.getSharedPreferences(context).registerOnSharedPreferenceChangeListener(
  new SharedPreferences.OnSharedPreferenceChangeListener() {
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
       if(key.equals("SOME_STRING_VALUE")){
          NEW_URL = prefs.getString("SOME_STRING_VALUE" , null);
       }
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...