2016-05-05 2 views
2

Мне нужно генерировать следующий запрос с retrofit2Как создать запрос массива объектов JSON с retrofit2

s=[{"uuid":"f7826da6-4fa2-4e98-8024-bc5b71e0893e","major":29551,"minor":30826}] 

Я попробовал несколько способов, в том числе:

@Query("s[uuid]") String uuid, 
@Query("s[major]") int major, 
@Query("s[minor]") int minor 

Но я не смог создать запрос правильно, используя retrofit2, каков правильный способ генерации запроса, который я хочу?

+0

Я сделал необходимое для вызова, пожалуйста, проверьте его @ Стив. – Lampard

ответ

1

Ваш параметр запроса является s, так что вам нужно что-то вроде:

@Query("s") MyParamType s 

Простое решение будет объявляющего класса (например, MyParamType) с атрибутами (uuid, major, minor) и переопределить метод toString(), чтобы вернуть желаемый формат.

Пример:

public String toString() { 
    return String.format("[{\"uuid\":\"%s\",\"major\":%d,\"minor\":%d}]", this.uudi, this.major, this.minor); 
} 
+0

Привет, спасибо за ваше предложение, но окончательный url не имеет строки, возвращаемой из MyParamType logcat, показывает ее правильно, но она не передается http-запрос правильно кажется, что какой-то символ побега отсутствует или что-то – Steve

+1

Я получил его работу, спасибо, я принимаю ваш ответ :) – Steve

+0

@Steve Я рад, что помог! –

1

Сделай шаг за шагом Steve.First Преобразуйте JSON массив Pojo.I сделали это для вас проверить это:

public class BeaconPojo { 







     @SerializedName("uuid") 
     @Expose 
     private String uuid; 
     @SerializedName("major") 
     @Expose 
     private Integer major; 
     @SerializedName("minor") 
     @Expose 
     private Integer minor; 

     /** 
     * 
     * @return 
     * The uuid 
     */ 
     public String getUuid() { 
      return uuid; 
     } 

     /** 
     * 
     * @param uuid 
     * The uuid 
     */ 
     public void setUuid(String uuid) { 
      this.uuid = uuid; 
     } 

     /** 
     * 
     * @return 
     * The major 
     */ 
     public Integer getMajor() { 
      return major; 
     } 

     /** 
     * 
     * @param major 
     * The major 
     */ 
     public void setMajor(Integer major) { 
      this.major = major; 
     } 

     /** 
     * 
     * @return 
     * The minor 
     */ 
     public Integer getMinor() { 
      return minor; 
     } 

     /** 
     * 
     * @param minor 
     * The minor 
     */ 
     public void setMinor(Integer minor) { 
      this.minor = minor; 
     } 

    } 

Затем создать интерфейс, как это:

public class EndPointInterface { 
    @GET("getBecon") 
    Call<ArrayList<BeaconPojo>> getBeacons(); 
} 

После что Создать Utilility класс:

общественного класса ApiUtil {

public static final boolean isEnableLogging = true; 


    public static Retrofit getPetListInstance(){ 
     HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 
     if(isEnableLogging) 
      logging.setLevel(HttpLoggingInterceptor.Level.BODY); 
     else 
      logging.setLevel(HttpLoggingInterceptor.Level.NONE); 
     OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 
     httpClient.addInterceptor(logging); 
     return new Retrofit.Builder() 
       .baseUrl(Constant.base_url) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .client(httpClient.build()) 
       .build(); 

    } 





} 

Затем, когда вы вызываете вебсервис попробовать это:

ApiEndInterface service = 

    ApiUtil.getPetListInstance().create(ApiEndInterface.class); 
      Call<ArrayList<BeaconPojo>> call = service.getPets(); 
      call.enqueue(new Callback<ArrayList<BeaconPojo>() { 
       @Override 
       public void onResponse(Call<ArrayList<BeaconPojo>> call, Response<ArrayList<BeaconPojo>> response) { 

       } 

       @Override 
       public void onFailure(Call<ArrayList<BeaconPojo>> call, Throwable t) { 

       } 
      }); 
+0

Привет @CrazyAndroid, спасибо за попытку помочь, но если я не ошибаюсь, вы отправили решение о том, как преобразовать полученный json из webservice в pojo. Это не то, что я хочу, я хочу построить url GET со следующими s = [{"uuid": "f7826da6-4fa2-4e98-8024-bc5b71e0893e", "major": 29551, "minor": 30826}] как параметр запроса! – Steve

+0

Да для параметра запроса я предоставил EndPointInterface. Пройдите его полностью @ Stev – Lampard

Смежные вопросы