Retrofit2 Как поставить / в конце динамического baseUrl?

Я отправил и получил строку URL-адреса из ответа json, используя Parcelable во фрагменте, подобном этому

Полученное строковое значение

String profile_url = student.getProfile();

Я хочу использовать это строковое значение в качестве basUrl, чтобы сделать другой запрос с использованием Retrofit, например

Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(profile_url)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

Но получая следующую ошибку

java.lang.RuntimeException: An error occured while executing doInBackground()

            ......

Caused by: java.lang.IllegalArgumentException: baseUrl must end in /:

Как поставить / в конце baseUrl? Если говорить прямо так

Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl(profile_url/)
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();

не работает, ожидается Экспресс.

Любая помощь. Спасибо

URL-адрес профиля отладки profile_url=http://services.hanselandstudent.com/student.svc/1.1/162137/category/1120/json?banner=0&atid=468f8dc2-9a38-487e-92ae-a194e81809d9


person Geob    schedule 20.04.2016    source источник
comment
Используйте Endpoint и сделайте Custom Endpoint Interface   -  person M D    schedule 20.04.2016
comment
@MD, извините, я новичок, пожалуйста, помогите мне. Благодарность   -  person Geob    schedule 20.04.2016
comment
можете ли вы отладить и опубликовать, каков именно ваш profile_url?   -  person xiaoyaoworm    schedule 20.04.2016
comment
@xiaoyaoworm-добавил URL-адрес профиля отладки. Это абсолютный URL   -  person Geob    schedule 20.04.2016
comment
@Geob Можете ли вы установить расширение Advanced Rest Client в Chrome и скопировать туда свой URL-адрес с путем GET/POST/PUT/DELETE, чтобы попытаться увидеть, сможете ли вы получить ответ. Обычно я делаю URL-адрес следующим образом: Retrofit retrofit = new Retrofit.Builder() .baseUrl(http://yourServerip:port/) .addConverterFactory(GsonConverterFactory.create()) .build(); Вот как выглядит интерфейс: @GET(something) Call‹List‹Something›› getSomething(); Вся ссылка будет http://yourServerip:port/something   -  person xiaoyaoworm    schedule 21.04.2016


Ответы (2)


Поскольку у вас есть полный URL-адрес для вызова, вам понадобится аннотация @Url в Retrofit2.

Определите свой интерфейс с чем-то вроде этого

public interface YourApiService {
    @GET
    Call<Profile> getProfile(@Url String url);

    class Factory {
        public static YourApiService createService() {
             Retrofit retrofit = new Retrofit.Builder()
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .baseUrl("http://www.what.com/")
                .build();
             return retrofit.create(YourApiService.class);
       }
    }
}

Затем вызовите его с помощью

YourApiService.createService().getProfile(profile_url);
person Baloomba    schedule 04.10.2016

Вы должны иметь «/» в конце вашей строковой переменной.

String profile_url = student.getProfile() + "/";
Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl(profile_url)
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();
person V.Sch    schedule 20.04.2016
comment
пробовал и так, та же ошибка. Вызвано: java.lang.IllegalArgumentException: baseUrl должен заканчиваться на /: - person Geob; 20.04.2016