Как изменить значение только в конкретном параметре в модификации Android - PullRequest
0 голосов
/ 08 июля 2019

У меня есть URL

https://pixabay.com/api/?key=12973823-c1d0c689a2cb0af7706951221&q=dogs&image_type=photo

В приведенном выше URL, q = запрос Здесь я должен изменить данные для передачи параметра.

Но я не знаю, как передать параметр только в q, тогда как все остальные после q фиксированы.

Я могу применять только как статический, но я не знаю, как изменить q, передавая поле edittext в виде строки этому параметру q =

public class RetrofitService {
    private static Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://pixabay.com/api/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    //can't change to private. Since the use case of create service is in another class
    public static <S> S createService(Class<S> serviceClass) {
        return retrofit.create(serviceClass);
    }


}  



  public interface ImageApiInterface {
    @GET("?key=12973823-c1d0c689a2cb0af7706951221&q=dogs&image_type=photo")
    Call<MyImages> getMovieDetails();
}

Здесь я передаю staticстрока как собака, которая работает, но мне нужно изменить это в качестве входных параметров.

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Ваш API-интерфейс будет выглядеть следующим образом:

public interface ImageApiInterface {
  String PIXABAY_URL = "https://pixabay.com/";

  @GET("api/?key=12973823-c1d0c689a2cb0af7706951221&image_type=photo")
  Call<PixabayResponse> getMovieDetails(@Query("q") String query);
}

Создать класс модели Pixabay

public class Pixabay implements Serializable {

@SerializedName("id")
@Expose
private String id;

@SerializedName("largeImageURL")
@Expose
private String imageUrl;

@SerializedName("user_id")
@Expose
private String userId;


public String getImageUrl() {
    return imageUrl;
}

public void setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getUserId() {
    return userId;
}

public void setUserId(String userId) {
    this.userId = userId;
}

}

Создать класс PixabayResponse

public class PixabayResponse implements Serializable {

@SerializedName("totalHits")
@Expose
private String totalHits;

@SerializedName("hits")
@Expose
private List<Pixabay> pixabayList;

public List<Pixabay> getPixabayList() {
    return pixabayList;
}

public void setPixabayList(List<Pixabay> pixabayList) {
    this.pixabayList = pixabayList;
}

public String getTotalHits() {
    return totalHits;
}

public void setTotalHits(String totalHits) {
    this.totalHits = totalHits;
}

}

Теперь создайте метод в своей деятельности:

private void callPixabayImages(String query){
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Api.PIXABAY_URL)
            .addConverterFactory(GsonConverterFactory.create()) //Here we are using the GsonConverterFactory to directly convert json data to object
            .build();

    Api api = retrofit.create(Api.class);

    Call<PixabayResponse> call = api.getMovieDetails(query);
    call.enqueue(new Callback<PixabayResponse>() {
        @Override
        public void onResponse(Call<PixabayResponse> call, Response<PixabayResponse> response) {
            List<Pixabay> imagesList = response.body().getPixabayList();

            for (int i=0; i<imagesList.size(); i++){
                Pixabay data = imagesList.get(i);
                System.out.println("ID# "+ data.getId());
                System.out.println("UserID: "+ data.getUserId());
                System.out.println("ImageURL: "+ data.getImageUrl());
            }
        }

        @Override
        public void onFailure(Call<PixabayResponse> call, Throwable t) {
            System.out.println("Error: "+ t.getMessage());
        }
    });

}

Теперь вызовите этот метод, как показано ниже:

callPixabayImages("dogs");
0 голосов
/ 08 июля 2019

Вы можете сделать что-то похожее на это.

 public interface ImageApiInterface {
    @GET("?key=12973823-c1d0c689a2cb0af7706951221&q={query}&image_type=photo")
    Call<MyImages> getMovieDetails(@Path("query") String query);
}
...