Как отправить данные JSON с модернизацией на сервер? - PullRequest
0 голосов
/ 04 декабря 2018

В моем приложении я хочу отправить json данные из моего приложения на сервер, а для запросов к серверу я использую библиотеку Retrofit2.
Я должен отправить данные в формате :

“logs”:[ { “post_id”:“3”, “log”:[{“timer”:2,“last”:19,“ping”:1}, {“timer”:6,“last”:3,“ping”:5}, {“timer”:9,“last”:11,“ping”:7}, ] }, 
        { “post_id”:“6”, “log”:[{“timer”:9,“last”:3,“ping”:13}] },
        { “post_id”:“20”, “log”:[{“timer”:10,“last”:1,“ping”:5},{“timer”:4,“last”:2,“ping”:9}, {“timer”:9,“last”:4,“ping”:6}, {“timer”:3,“last”:19,“ping”:9}, ] },]

когда пользователи нажимают на button я получаю эти данные: таймер - последний - пинг

для сохранения вышеуказанных данных на устройстве, я использую библиотеку Room.

я могу сохранить эти данные ( таймер - последний - ping ) в room, но я не знаюКак я могу соединиться с этими данными в post_id !

Затем, наконец, преобразовать вышеуказанные данные в json формат и отправить на сервер.

Номер класса Entity:

@Entity(tableName = Constants.SOCKET_PING_DATABASE_TABLE)
public class SocketPingEntity {

    @PrimaryKey()
    @NonNull
    @ColumnInfo(name = Constants.SOCKET_PING_DATABASE_PING_TIME)
    private int ping;

    @ColumnInfo(name = Constants.SOCKET_PING_DATABASE_CLICK_TIME)
    private int timer;

    @ColumnInfo(name = Constants.SOCKET_PING_DATABASE_LAST_PING)
    private Long last;

    public int getPing() {
        return ping;
    }

    public void setPing(int ping) {
        this.ping = ping;
    }

    public int getTimer() {
        return timer;
    }

    public void setTimer(int timer) {
        this.timer = timer;
    }

    public Long getLast() {
        return last;
    }

    public void setLast_ping(Long last) {
        this.last = last;
    }
}

Класс Room Dao для хранения данных:

@Insert(onConflict = OnConflictStrategy.REPLACE)
void addPingInfo(SocketPingEntity pingEntity);

Используйте этот код для добавления данныхв комнату:

SocketPingEntity entity = new SocketPingEntity();
entity.setPing((int) socketPing);
entity.setClick_time((int) remainTime);
entity.setLast_ping(lastPing);
socketPingDatabase.socketPingDao().addPingInfo(entity);

Используйте этот код для установки данных на сервер в формате json:

pingEntityList.addAll(socketPingDatabase.socketPingDao().getSocketPingEntityList());
                                    SocketPingBodySendData pingBodySendData = new SocketPingBodySendData();
                                    pingBodySendData.setAuction_id(auctionID);
                                    pingBodySendData.setData(new Gson().toJsonTree(pingEntityList));
                                    Log.i("socketSendDataLog", "\n Json : " + new Gson().toJsonTree(pingEntityList));

                                    Call<SocketPingResponse> pingResponseCall = apis.getSocketPingLog(jwtToken, pingBodySendData);
                                    pingResponseCall.enqueue(new Callback<SocketPingResponse>() {
                                        @Override
                                        public void onResponse(Call<SocketPingResponse> call, Response<SocketPingResponse> response) {
                                            if (response.body() != null) {
                                                Log.e("socketLogResponse", "Response : " + response.body().getStatus());
                                                if (response.body().getStatus().equals("ok")) {
                                                    isSendSocketPingData = true;
                                                    pingEntityList.clear();
                                                    socketPingDatabase.socketPingDao().deleteAll();
                                                }
                                            }
                                        }

                                        @Override
                                        public void onFailure(Call<SocketPingResponse> call, Throwable t) {
                                            Log.e("socketLogResponse", "Error : " + t.toString());
                                        }
                                    });

Вызовите коды API:

@POST("api/user_log")
Call<SocketPingResponse> getSocketPingLog(@Body SocketPingBodySendData socketPingBodySendData);

Коды класса SocketPingBodySendData:

public class SocketPingBodySendData {
    @SerializedName("auction_id")
    @Expose
    int auction_id;
    @SerializedName("data")
    @Expose
    JsonElement data;

    public int getAuction_id() {
        return auction_id;
    }

    public void setAuction_id(int auction_id) {
        this.auction_id = auction_id;
    }

    public JsonElement getData() {
        return data;
    }

    public void setData(JsonElement data) {
        this.data = data;
    }
}

При использовании вышеуказанных кодов отправляйте такие данные, как:

{“log”:[{“clickTime”:34,“pingTime”:“160"},{“clickTime”:43,“pingTime”:“310”},{“clickTime”:59,“pingTime”:“380"}]}

НоЯ хочу отправить, например, это:

“logs”:[ { “post_id”:“3”, “log”:[{“timer”:2,“last”:19,“ping”:1}, {“timer”:6,“last”:3,“ping”:5}, {“timer”:9,“last”:11,“ping”:7}, ] }, 
        { “post_id”:“6”, “log”:[{“timer”:9,“last”:3,“ping”:13}] },
        { “post_id”:“20”, “log”:[{“timer”:10,“last”:1,“ping”:5},{“timer”:4,“last”:2,“ping”:9}, {“timer”:9,“last”:4,“ping”:6}, {“timer”:3,“last”:19,“ping”:9}, ] },]

Как я могу это сделать?

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