Как разместить данные в массиве в Android с помощью дооснащения 2 - PullRequest
0 голосов
/ 22 ноября 2018

У меня проблема с размещением данных в массиве в Android с использованием дооснащения 2. Мне нужно опубликовать данные почти 14 полей в моей деятельности по настройке профиля ... Вот так ...

name="basics[first_name] , name="basics[last_name]" , name="basics[phone_number]"

Я должен отправить данные в этом формате.Я не понимаю, как это сделать, нужна помощь. Я не понимаю, как сделать вызов API в интерфейсе, потому что я должен поместить данные в массив.В настоящее время я делаю это так, но я знаю, что это неправильно ...

@FormUrlEncoded
    @POST("profile_setting/basic_setting")
    Call<ResponseBody> UpdateBasics(
            @Query("user_id") int user_id ,
            @Field("nickname") String nickname ,
            @Field("first_name") String  first_name ,
            @Field("last_name") String last_name ,
            @Field("phone_number") String phone_number ,
            @Field("fax") String fax
    );

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Создайте класс

public class Basic {
  public final int user_id;
  public final String nickname;
  ....

  public Basic(int user_id, ...) {

  }
}

Затем передайте список объектов этого класса этому интерфейсу

public interface MyService {
  @POST("/basic")
  Response void sendData(@Body List<Basic> basic);
}

Или вы можете сделать то же самое с JSONObject.Просто составьте список jsonobjects

JSONObject paramObject = new JSONObject();
                    paramObject.put(value_one, "field_one"));
                    paramObject.put(value_second, "field_second"));

, поместите объекты в список

list.add(paramObject);

, затем перейдите к модификации

public interface MyService {
  @POST("/basic")
  Response void sendJsonObjectData(@Body List<JSONObject> basic);
}
0 голосов
/ 22 ноября 2018

Вы можете следить за этим.(публикуя, как я это сделал)

@POST("Users.json")
Call<UploadData> uploadToken(@Body UploadData uploadData);

UploadData.class

public class UploadData {

private String DeviceToken, DeviceIMEI;

public UploadData(String deviceToken, String deviceIMEI) {
    DeviceToken = deviceToken;
    DeviceIMEI = deviceIMEI;
}

public String getDeviceToken() {
    return DeviceToken;
}

public String getDeviceIMEI() {
    return DeviceIMEI;
}
}

Затем в вашей деятельности

private void uploadToken() {
     ApiInterface apiInterface = ApiClient.getClient().create(ApiInterface.class);
     UploadData uploadToken = new UploadData(deviceToken, imei);
     final Call<UploadData> callUpload = apiInterface.uploadToken(uploadToken);

callUpload.enqueue(new Callback<UploadData>() {
        @Override
        public void onResponse(Call<UploadData> call, Response<UploadData> response) {
             if (response.isSuccessful()) {
                Toasty.success(Main.this, "Token Uploaded !! ", Toast.LENGTH_LONG).show();
              }
      }

       @Override
       public void onFailure (Call < UploadData > call, Throwable t){
              call.cancel();
              Toasty.error(Main.this, "Error: " + t.getLocalizedMessage(),Toast.LENGTH_SHORT).show();
        }
    });

 }
0 голосов
/ 22 ноября 2018

Делайте этот способ для отправки Json Объекта в качестве параметров запроса, используя Retrofit 2

    @Headers("Content-Type: application/json")
    @POST("profile_setting/basic_setting")
    Call<ResponseBody> UpdateBasics(@Body String body);

Так вы могли бы использовать вышеуказанный метод для отправки объекта json

try {
                    JSONObject paramObject = new JSONObject();
                    paramObject.put(value_one, "field_one"));
                    paramObject.put(value_second, "field_second"));
                    Call<ResponseBody> userCall = apiInterface.UpdateBasics(paramObject.toString());
                    userCall.enqueue(new Callback<ResponseBody>() {
                        @Override
                        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                            //handle your result here

                        }

                        @Override
                        public void onFailure(Call<LoginResponse> call, Throwable t) {
                           //handle failure
                        }
                    });
                } catch (JSONException e) {
                    e.printStackTrace();
                }
...