Sai*_*sin 0 java android google-maps-api-3 gson
我的服务器返回一个像这样的json对象:
{
"sw": {
"latitude": 12.283139573692,
"longitude": 76.623518155689
},
"ne": {
"latitude": 12.30112600581,
"longitude": 76.651167163598
}
}
Run Code Online (Sandbox Code Playgroud)
我的Gson课程是
import com.google.android.gms.maps.model.LatLng;
/**
* Created by Moz on 12/10/15.
*/
public class Box {
LatLng ne;
LatLng sw;
public LatLng getNorthEast() {
return ne;
}
public LatLng getSouthWest() {
return sw;
}
}
Run Code Online (Sandbox Code Playgroud)
它在这种情况下工作正常,因为LatLng类com.google.android.gms.maps.model使用名称作为纬度,经度.但是,我宁愿让我的服务器响应为lat,lng,因为它在发送大量latlng对象时节省了空间.这里的问题是,由于这个LatLng对象是Google库的一部分,我无法添加字段映射名称注释.我想继续使用原始谷歌的LatLng类,但同时允许服务器返回较小的响应,即lat,lng.怎么能实现这一目标?
你有没有尝试编写自己的解串器?你应该尝试这样的事情(未经测试).
public class LatLngDeserializer implements JsonDeserializer<LatLng> {
@Override
public LatLngdeserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context)
throws JsonParseException {
JsonObject jobject = json.getAsJsonObject();
return new LatLng(
jobject.get("lat").getAsDouble(),
jobject.get("lng").getAsDouble());
}
Run Code Online (Sandbox Code Playgroud)
你必须配置你的gson使用这个反序列化器
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(LatLng.class, new LatLngDeserializer());
Gson gson = gsonBuilder.create();
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用从服务器解析lat/long对象
LatLng latlng = gson.fromJson(jsonInput, LatLng.class);
Run Code Online (Sandbox Code Playgroud)
这里jsonInput看起来像
{
"lat" : 0.0,
"lng" : 0.0
}
Run Code Online (Sandbox Code Playgroud)
你也可以看到这个帖子
| 归档时间: |
|
| 查看次数: |
1268 次 |
| 最近记录: |