我想从我的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>() {

}

最佳答案

为了传递数据,您需要为该类创建一个构造函数。像这样的东西

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**构造函数具有与class相同的名称。仔细看我上面的答案。两者都具有相同的名称ApiClient。所以你的情况

public class RetrofitClient {

    Context my_conext;

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


从活动开始,您正在调用此RetrofitClient,这样调用

   RetrofitClient(MainActivity.this).getApi();

关于java - 从RetrofitClient内部的SharedPreferences获取BASE_URL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54782073/

10-10 22:30