發送POST消息這是我第一次與改造去,但我想的GPS數據點的數組從我的設備發送到我的服務器通過改造
這是我的POJO類
public class GpsData {
private long mId;
@SerializedName("mduid")
@Expose
private String mMduid;
@SerializedName("latitude")
@Expose
private double mLat;
@SerializedName("longitude")
@Expose
private double mLng;
@SerializedName("speed")
@Expose
private float mSpeed;
@SerializedName("time")
@Expose
private long mTime;
private boolean mSent;
@SerializedName("status")
@Expose
private String mStatus;
,這是我的要求類,用於保存列表
public class GpsRequest {
@SerializedName("gpsData")
@Expose
public List<GpsData> data;
}
這是我的接口
這是我如何做
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://"+ DEBUG_API)
.addConverterFactory(GsonConverterFactory.create())
.build();
GpsApiInterface apiInterface = retrofit.create(GpsApiInterface.class);
ArrayList<GpsData> list = new ArrayList<>();
list.add(data);
list.add(data);
GpsRequest request = new GpsRequest();
request.data = list;
Call<ResponseBody> call = apiInterface.sendGpsData(request);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if(response.code() == HttpURLConnection.HTTP_OK){
GpsDB db = new GpsDB(LocationService.this);
db.delete(GpsDB.ID+"=?",new String[]{String.valueOf(id)});
db.close();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
這是我使用測試
public class GPSController : ApiController
{
public GPSController() { }
public HttpResponseMessage Post([FromBody]GPSData[] gpsData)
{
if (gpsData != null)
{
for (int i = 0; i < gpsData.Length; i++)
{
}
return Request.CreateResponse(HttpStatusCode.OK);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
}
這是服務器上的GPS數據類服務器代碼請求
public class GPSData
{
public string mduid;
public double latitude;
public double longitude;
public int speed;
public string time;
public string status;
}
當我提出請求時服務器被擊中,但沒有數據(gpsData爲空)。如果我從postman
撥打相同的電話,它會被調用,並且數據在那裏,所以我錯過了什麼?
更新
添加記錄到okhttp,這是日誌
D/OkHttp: --> POST http://192.168.202.170:9001/api/v2/GPS http/1.1
D/OkHttp: Content-Type: application/json; charset=UTF-8
D/OkHttp: Content-Length: 247
D/OkHttp: Accept: application/json
D/OkHttp: Host: 192.168.202.170:9001
D/OkHttp: Connection: Keep-Alive
D/OkHttp: Accept-Encoding: gzip
D/OkHttp: User-Agent: okhttp/3.6.0
D/OkHttp: {"gpsData":[{"mId":0,"latitude":43.0360532,"longitude":-78.8010079,"mSent":false,"speed":0.0,"status":"OK","time":1492088158526},{"mId":0,"latitude":43.0360532,"longitude":-78.8010079,"mSent":false,"speed":0.0,"status":"OK","time":1492088158526}]}
D/OkHttp: --> END POST (247-byte body)
從Postman
[
{
"latitude": 43.0360532,
"longitude": -78.8010079,
"speed": 0,
"time": 1492027407344
},
{
"latitude": 43.0360532,
"longitude": -78.8010079,
"speed": 0,
"time": 1492027407344
}
]
的數據工作將JSON從應用
被送到比較{
"gpsData": [
{
"mId": 0,
"latitude": 43.0360532,
"longitude": -78.8010079,
"mSent": false,
"speed": 0,
"status": "OK",
"time": 1492088158526
},
{
"mId": 0,
"latitude": 43.0360532,
"longitude": -78.8010079,
"mSent": false,
"speed": 0,
"status": "OK",
"time": 1492088158526
}
]
}
看來,因爲服務器上的gpsData
是一個數組,但應用程序發送數組的對象可能是問題?如果是這樣,我怎麼發送一個數組不在一個對象?
添加一個構造函數沒有幫助,仍然在服務器上得到空 – tyczj
你確定你的列表不是空的?另外,您可以通過添加loggingInterceptor [Retrofit 2 - Log Requests and Responses](https://futurestud.io/tutorials/retrofit-2-log-requests-and-responses)來調試您的請求。 – Bopmaster
我剛更新了我的帖子日誌記錄和工作json和非工作區別之間的區別 – tyczj