Задать вопрос
@super_beginer

Как правильно сделать запрос для сложно URL в retrofit2?

Доброго времени суток господа. Я недавно начал осваисать Retrofit2 в андроид (java).
Вот версия библиотеки
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

Вот сам URL https://api.themoviedb.org/3/discover/movie?api_ke...
В интерфейсе я его запросил так через гет
public interface IRetrofitInterface {
    @GET("movie")
    Call<Films> getAllFilms(
            @Query("api_key") String  api_key,
            @Query("language") String language,
            @Query("sort_by") String sort_By,
            @Query("include_adult") boolean include_adult,
            @Query("include_video") boolean include_video,
            @Query("page") int page);
}

В MainActivity сделал так
public class MainActivity extends AppCompatActivity {
    public static final String BASE_URL = "https://api.themoviedb.org/3/discover/";
    public static final String API_KEY = "45454655465465вашключ";
    public static final String LANGUAGE = "ru-RU";
    public static final String SORT_BY = "popularity.desc";
    public static final boolean INCLUDE_ADULT=false;
    public static final boolean INCLUDE_VIDEO=false;
    public static final int PAGE = 1;
    private List<Result> movies = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        parseJson();
    }

    private void parseJson() {

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

        IRetrofitInterface retrofitInterface = retrofit.create(IRetrofitInterface.class);
        Call<Films>  call;
        call = retrofitInterface.getAllFilms(API_KEY,LANGUAGE,SORT_BY,INCLUDE_ADULT,INCLUDE_VIDEO,PAGE);
        call.enqueue(new Callback<Films>() {
            @Override
            public void onResponse(Call<Films> call, Response<Films> response) {
                if(response.isSuccessful()&& response.body().getResults() !=null){
                   if(!movies.isEmpty()){
                       movies.clear();
                   }

                   movies = response.body().getResults();
                   for (Result movie :movies){
                       String title = movie.getTitle();
                       Log.i("title",title);
                   }
                }
            }

            @Override
            public void onFailure(Call<Films> call, Throwable t) {
            Log.i("error",t.getMessage());

            }
        });

    }
}

Я понимаю тут нет сингтона в интерфейсе но это не суть. Мне нужно просто проверить работает ли ссылка.
но в лог я получаю вот это 2019-05-22 22:55:43.287 17635-17635/com.example.testretrofit I/error: socket failed: EPERM (Operation not permitted)
В манифесте разрешения уже включены.
<uses-permission android:name="android.permission.INTERNET"/>

Подскажите что делаю не так, инетрен есть все норм. тестю на эмуляторе.
  • Вопрос задан
  • 200 просмотров
Подписаться 1 Средний 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы