我试图从一个Json文件中提取一个对象列表,但是该文件以一个对象开始,该对象包含我需要的对象数组。我是一个新的改造这里是我的文件:接口
public interface OSMApi {
@Headers({"Accept: application/json"})
@GET("map")
Call<List<OSMObject>> getOSMObjects(@Query("bbox") String boxMinMaxLatLon);
}
控制器
public class OSMController implements Callback<List<OSMObject>> {
static final String BASE_URL = "https://api.openstreetmap.org/api/0.6/";
private static final String TAG = "OSMController";
private String bboxLatLon = "//latlongshere";
public void start(){
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
OSMApi osmApi = retrofit.create(OSMApi.class);
Call<List<OSMObject>> call = osmApi.getOSMNodes(bboxLatLon);
call.enqueue(this);
}
@Override
public void onResponse(Call<List<OSMObject>> call, Response<List<OSMObject>> response) {
if(response.isSuccessful()){
List<OSMObject> OSMObjectList = response.body();
OSMObjectList.forEach(OSMObject -> Log.d(TAG, "onResponse: objects "+OSMObject.getId()));
}else{
Log.d(TAG, "onResponse: here : "+response.errorBody() + ", "+response.code());
}
}
@Override
public void onFailure(Call<List<OSMObject>> call, Throwable t) {
Log.d(TAG, "onFailure: "+ t.getStackTrace() + ", extra: "+ t.getMessage());
}
}
Json的开头
{
"version": "0.6",
"generator": "CGImap 0.8.3 (652902 spike-07.openstreetmap.org)",
"copyright": "OpenStreetMap and contributors",
"attribution": "http://www.openstreetmap.org/copyright",
"license": "http://opendatacommons.org/licenses/odbl/1-0/",
"bounds": {
"minlat": 1.0,
"minlon": 1.0,
"maxlat": 1.0,
"maxlon": 1.0
},
"elements": [
{
"type": "node",
"id": 443479273,
"lat": 1.0,
"lon": 1.0,
"timestamp": "2011-04-11T18:06:02Z",
"version": 3,
"changeset": 4435725,
"user": "BeerOfTheTrip",
"uid": 440880
},
{
"type": "node",
"id": 443479278,
"lat": 1.0,
"lon": 1.0,
"timestamp": "2011-04-11T18:06:01Z",
"version": 2,
"changeset": 4435725,
"user": "BeerOfTheTrip",
"uid": 440880
},
{
"type": "node",
"id": 443479281,
"lat": 1.0,
"lon": 1.0,
"timestamp": "2011-04-11T18:06:01Z",
"version": 2,
"changeset": 4435725,
"user": "BeerOfTheTrip",
"uid": 440880
},
etc..........
我的对象Pojo
public class OSMObject implements SerializedName {
@SerializedName("type")
@Expose
private String type;
@SerializedName("id")
@Expose
private int id;
@SerializedName("lat")
@Expose
private double lat;
@SerializedName("lon")
@Expose
private double lon;
@SerializedName("timestamp")
@Expose
private String timestamp;
@SerializedName("version")
@Expose
private int version;
@SerializedName("changeset")
@Expose
private int changeset;
@SerializedName("uid")
@Expose
private int uid;
@SerializedName("nodes")
@Expose
private int[] nodes;
//Separation
private ArrayList<OSMNode> OSMNodes = new ArrayList<>();
private ArrayList<OSMWay> OSMWays = new ArrayList<>();
public OSMObject(String type, int id, String timestamp, int version, int changeset, int uid, int[] nodes) {
this.type = type;
this.id = id;
this.timestamp = timestamp;
this.version = version;
this.changeset = changeset;
this.uid = uid;
this.nodes = nodes;
}
public OSMObject(String type, int id, double lat, double lon, String timestamp, int version, int changeset, int uid) {
this.type = type;
this.id = id;
this.lat = lat;
this.lon = lon;
this.timestamp = timestamp;
this.version = version;
this.changeset = changeset;
this.uid = uid;
}
+getters and setters....
所以我不需要jsonObject中的任何初始信息,我所需要的只是元素jsonArray中的对象列表,它由两个稍微不同的对象组成,一个有nodes[],一个没有。因此POJO中有2个构造函数?
我如何设置改装来处理这件事?与当前一样,我在失败时得到的错误是:
onFailure:[Ljava.lang.StackTraceElement;@DBE860F,Extra:应为BEGIN_ARRAY,但在第1行第2列路径$处为BEGIN_OBJECT
附加:两个不同对象的示例:
{
"type": "node",
"id": 4448646916,
"lat": 1.0,
"lon": 1.0,
"timestamp": "2020-12-21T17:52:35Z",
"version": 1,
"changeset": 44211151,
"user": "Mike Greenwood",
"uid": 44623152
},
{
"type": "way",
"id": 44117969,
"timestamp": "2014-04-11T14:01:16Z",
"version": 2,
"changeset": 44627679,
"user": "Smurfy12",
"uid": 44220096,
"nodes": [
4483345702,
443479293,
443479273
],
"tags": {
"highway": "residential",
"name": "A Street"
}
},
正如您所看到的,它们是不同的“类型”一个“节点”和一个“方式”方式有一个节点数组,而节点有一个“lat”和“lon”我现在不需要担心“标签”。
在“onresponse”中,尝试以下操作:
if (response.isSuccessful()) {
JSONObject reader = new JSONObject(response.body());
List<OSMObject> OSMObjectList = (List<OSMObject>) reader.getJSONArray("elements");
// now you can work on your "elements" list..
} else {
Log.d(TAG, "onResponse: here : " + response.errorBody() + ", " + response.code());
}
注意:关于两个构造函数--我不确定你如何区分你需要使用哪一个构造函数的区别,因为在你的“元素”数组中只有3个相似的对象,所以如果你需要帮助--请解释一下区别是什么,或者给出你可能在那个数组中收到的另一个对象的例子。
因此,我正在构建一种基于对象的模型方法,并试图将所有现有的jQuery转换为纯JavaScript调用,但我遇到了一些问题。 所以我有一个基本的基础: 由于某些原因,当使用jQuery调用时,它都运行得很好,但是当使用Document.QuerySelector调用JS替代项时,我会得到一个错误,如下所示: 谁能给我解释一下.find()调用和传统JS的主要区别是什么?
问题内容: 首先看下面的JavaScript对象 我想将值设置为与相同,因此我将对象值放在前面,但它对我不起作用,我也使用过,但仍然失败。我的问题是如何访问对象内对象的属性。 一些用户沉迷于问“您想做什么或发送脚本等”,对于那些人来说,答案很简单:“我想访问对象内的对象属性”,上面提到了脚本。 任何帮助将不胜感激 :) 问题答案: 使用 对象文字 语法时,不能在初始化期间引用对象。创建对象后,需要
在JFrame类中,我有一个JPasswordField对象,如下所示: 我尝试通过以下代码行访问其插入的内容(用户插入的密码): 问题是,当我打印该内容时,我得到以下输出:password:[C@D5C0F9,而不是插入的密码
问题内容: 我有以下数组,当我做得到: 我试图按如下方式访问数组: 但这显示了我: 未定义0 注意: 我从 Facebook SDK 4 获得此数组,所以我不知道原始的数组结构。 作为示例,如何访问数组中的值? 问题答案: 要访问或您如何使用两个不同的运算符。 数组 要访问数组元素,您必须使用,或者您不会看到太多,但也可以使用is 。 声明数组和访问数组元素之间的区别 定义数组和访问数组元素是两件
上面的代码在我的主方法中。被注释掉的行抛出错误“无法在类车辆中找到符号”。我正在从一个文件中读取并将信息放置到正确的对象数据字段中。数组是车辆数组。根据我的理解,车辆数组的一个元素可以是车辆或车辆的任何子类。Getters和setters方法可用于每个相应的类和子类,使用父类的Getters和setters。汽车是车辆的一个子类。当我刚刚创建car对象时,为什么不在尝试vehicle之前先尝试访问
我正在使用mongoose将一个玩家推入mongoose中的玩家数组,当一个玩家加入游戏时。我收到以下错误: