2012-09-27 54 views
0

我想通過得到的形狀文件的點,而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 

     } 
    } 
] 

}

請幫我謝謝 。

+0

TL;博士。你有什麼嘗試,什麼失敗,這會給你帶來什麼樣的錯誤? – njzk2

回答

1
在循環

,你一遍又一遍放在同一個JSON對象的值。因此,當您對它進行jsonify時,您的數組包含n *個相同的對象。

您需要創建新的對象,以在每個循環過程中添加。

這三個聲明必須在循環中移動:

JSONObject geomJson = new JSONObject(); 
JSONObject attJson = new JSONObject(); 
JSONObject featuresJson = new JSONObject(); 
+0

非常感謝,它的工作。 – pravallika