РАЗМЕЩЕНИЕ JSON-объекта на сервере с помощью Retrofit - PullRequest
0 голосов
/ 03 сентября 2018

Я пытался отправить объект JSON на сервер из моего приложения для Android, но, похоже, он не работает. Нет ошибки, но она также не отправляет данные на сервер. Ниже приведен мой код:

Вот мой код ServiceGenerator.java

public class ServiceGenerator {

    private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

    public static <S> S createService(Class<S> serviceClass, String baseUrl)
    {
        Retrofit builder = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .client(httpClient.build())
                .build();

        return builder.create(serviceClass);
    }
}

Вот мой класс интерфейса

public interface IRetrofit {
    @Headers({

            "Accept: application/json",
            "Content-Type: application/json"
    })
    @POST("saveRawJSONData")
    Call<JsonObject> postRawJSON(@Body JsonObject jsonObject);
}

и мой MainActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void onPostClicked(View view){

        JsonObject jsonObject = new JsonObject();
        JsonArray clientsArray = new JsonArray();
        JsonObject clientsObject = new JsonObject();

        clientsObject.addProperty("name", "test");
        clientsObject.addProperty("email", "test@gmail.com");
        clientsObject.addProperty("phoneNumber", "test");


        clientsArray.add(clientsObject);
        jsonObject.add("clients", clientsArray);


        // Using the Retrofit
        IRetrofit jsonPostService = ServiceGenerator.createService(IRetrofit.class, "http://192.168.137.1/originorders/clients/index/");
        Call<JsonObject> call = jsonPostService.postRawJSON(jsonObject);
        call.enqueue(new Callback<JsonObject>() {

            @Override
            public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
                try{
                    Log.e("response-success", response.body().toString());
                }catch (Exception e){
                    e.printStackTrace();
                }

            }

            @Override
            public void onFailure(Call<JsonObject> call, Throwable t) {
                Log.e("response-failure", call.toString());
            }
        });
    }
}

Так что мне делать, или я сделал что-то не так? Любая помощь будет высоко ценится. Заранее спасибо.

1 Ответ

0 голосов
/ 04 сентября 2018

Аннотация @Body Retrofit автоматически сериализует данные. Итак, вам нужно пройти тело, как показано ниже.

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

import com.google.gson.annotations.SerializedName;

public class Data {

   @SerializedName("name")
   private String name;
   @SerializedName("email")
   private String email;
   @SerializedName("phoneNumber")
   private String phoneNumber;

   public Data(String name, String email, String phoneNumber) {
      this.name = name;
      this.email = email;
      this.phoneNumber = phoneNumber;
   }

   // getter and setter methods
}

Использование вышеупомянутого класса.

В классе интерфейса API изменить параметр метода.

Call<JsonObject> postRawJSON(@Body Data data); // from JSONObject to Data

А внутри onPostClicked(View view) Метод

// code
Data d = new Data("test", "test@gmail.com", "9876543210");
Call<JsonObject> call = jsonPostService.postRawJSON(d);
call.enqueue(/* your code implementation here */);

Теперь попробуйте отправить запрос (пост) на сервер.

P.S : Имя класса POJO может быть любым. Для демонстрации я создал Data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...