我想通過得到的形狀文件的點,而loop.The形狀文件包含73個points.I我存儲形狀文件的點JSON oject並添加對象的ArrayList在一個循環,while循環下面創建JSON對象即時檢索ArrayList的對象,並將其存儲在JsonArray中,但這裏的問題只是shapefile的最後一個記錄點在arraylist中存儲73次。如何解決這個問題請幫助我。如何通過在android中重複循環來創建json對象?
這裏是我的代碼
try {
File file= new File(Environment.getDataDirectory().getAbsolutePath()+"/ne_50m_admin_0_tiny_countries.shp");
Long fileLength=file.length();
Log.d("FileLength is","file"+fileLength);
String shpFile = Environment.getDataDirectory().getAbsolutePath().toString()+"/ne_50m_admin_0_tiny_countries.shp";
//String shpFile = Environment.getDataDirectory().getAbsolutePath().toString()+"/ne_50m_admin_0_breakaway_disputed_areas.shp";
ShapeReader reader = new ShapeReader(shpFile, true);
ShapeType shpType=reader.getHeader().getShapeType();
JSONObject jObject = new JSONObject();
JSONObject wkidJson = new JSONObject();
jObject.put("objectIdFieldName","OBJECTID");
jObject.put("globalIdFieldName","");
jObject.put("geometryType",shpType);
wkidJson.put("wkid", new Integer(102100));
jObject.put("spatialReference",wkidJson);
JSONArray fieldsList = new JSONArray();
JSONObject idJson = new JSONObject();
JSONObject yJson = new JSONObject();
JSONObject xJson = new JSONObject();
idJson.put("name","OBJECTID");
idJson.put("alias", "OBJECTID");
idJson.put("type", "esriFieldTypeOID");
yJson.put("name","y");
yJson.put("alias", "y");
yJson.put("type", "esriFieldTypeDouble");
xJson.put("name","x");
xJson.put("alias", "x");
xJson.put("type", "esriFieldTypeDouble");
fieldsList.put(idJson);
fieldsList.put(yJson);
fieldsList.put(xJson);
jObject.put("fields",fieldsList);
JSONObject geomJson = new JSONObject();
JSONObject attJson = new JSONObject();
JSONObject featuresJson = new JSONObject();
JSONArray featuresList = new JSONArray();
Log.d("Header info is","Header"+reader.getHeader().getFileLength());
recordshape=reader.new Record();
ArrayList a= new ArrayList();
while (reader.hasNext())
{
if(recordshape.end < fileLength)
{
if(shpType==ShapeType.POINT)
{
recordshape=reader.nextRecord();
int recordNumber=recordshape.number;
double Xcoordinate= recordshape.minX;
double Ycoordinate=recordshape.minY;
Log.d("Xcoordinate info is","Xcoordinate"+Xcoordinate);
Log.d("Ycoordinate info is","Ycoordinate"+Ycoordinate);
geomJson.put("x", Xcoordinate);
geomJson.put("y", Ycoordinate);
attJson.put("OBJECTID", recordNumber);
attJson.put("y", Ycoordinate);
attJson.put("x", Xcoordinate);
}
}
else
break;
featuresJson.put("geometry", geomJson);
featuresJson.put("attributes", attJson);
a.add(featuresJson);
Log.d("featuresJson info is","featuresJson"+featuresJson);
}
Log.d("featuresJson info is","featuresJson"+featuresJson);
Log.d("size info is","size"+a.size());
for(int i=0;i<a.size();i++)
{
featuresList.put(a.get(i));
}
Log.d("featuresList info is","featuresList"+featuresList);
jObject.put("features",featuresList);
String jsonString = jObject.toString();
jsonString = jsonString.replace("\\" , "");
FileWriter writeFile = new FileWriter(Environment.getDataDirectory().getAbsolutePath().toString()+"/Test.json");
BufferedWriter out = new BufferedWriter(writeFile);
out.write(jsonString);
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("Error","Message"+e.getMessage());
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("Exception","Message"+e.getMessage());
}
的JSON格式的,我想是
{
"objectIdFieldName": "OBJECTID",
"globalIdFieldName": "",
"geometryType": "esriGeometryPoint",
"spatialReference": {
"wkid": 102100
},
"fields": [
{
"name": "OBJECTID",
"alias": "OBJECTID",
"type": "esriFieldTypeOID"
},
{
"name": "y",
"alias": "y",
"type": "esriFieldTypeDouble"
},
{
"name": "x",
"alias": "x",
"type": "esriFieldTypeDouble"
}
],
"features": [
{
"geometry": {
"x": -13021472.272599999,
"y": 4046325.7190999985
},
"attributes": {
"OBJECTID": 212,
"y": 4046325.7191,
"x": -13021472.2726
}
},
{
"geometry": {
"x": -13021124.9134,
"y": 4046747.3976000026
},
"attributes": {
"OBJECTID": 232,
"y": 4046747.3976,
"x": -13021124.9134
}
}
]
}
請幫我謝謝 。
TL;博士。你有什麼嘗試,什麼失敗,這會給你帶來什麼樣的錯誤? – njzk2