Получить BASE_URL из SharedPreferences внутри RetrofitClient - PullRequest
0 голосов
/ 20 февраля 2019


Я хочу получить BASE_URL из SharedPreferences внутри моего RetrofitClient Класса.
Мой код:
RetrofitClient.java :

public class RetrofitClient {
    private static final String BASE_URL = getBaseUrl();

    private String getBaseUrl() {
        SharedPreferences sp1 = getSharedPreferences("Login", MODE_PRIVATE);
        String apiUrl = sp1.getString("apiUrl", null);
        return apiUrl;
    }

    private RetrofitClient() {
        //MyRetrofitClient...
    }
}

Как мне заставить его работать?
MainActivity.java :

Call<LoginResponse> call = RetrofitClient
            .getInstance()
            .getApi()
            .loginUser(username, password, action);

call.enqueue(new Callback<LoginResponse>() {

}

1 Ответ

0 голосов
/ 20 февраля 2019

Для передачи данных вам нужно создать конструктор для этого класса.как-то так

public class ApiClient {

Context my_conext;

  public ApiClient (Context context) {

        my_conext= context;
    }

 SharedPreferences sp1 = my_context.getSharedPreferences("Login", MODE_PRIVATE);

}

РЕДАКТИРОВАТЬ: из вашего обновленного кода.

вы делаете это неправильно.

Прежде всего, не вызывайте функцию во время инициализации.используйте вот так

 retrofit = new Retrofit.Builder()
                .baseUrl(getBaseUrl(my_context))
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)
                .build();

Второе.вам нужен **Constructor** конструктор с тем же именем, что и класс.внимательно посмотрите мой ответ выше.оба имеют одно и то же имя ApiClient.так что в вашем случае

public class RetrofitClient {

    Context my_conext;

      public RetrofitClient (Context context) {
            my_conext= context;
        }
    }

от активности, вы называете это RetrofitClient, звоните вот так

   RetrofitClient(MainActivity.this).getApi();
...