2016-04-12 7 views
1

JSONから座標を解析したいと思います。私の問題は次のとおりです。org.json.JSONException:java.lang.Double型の値10.07526をJSONObjectに変換できません。org.json.JSONException:java.lang.Double型の0の値10.07526をJSONObjectに変換できません

ありがとうございました。

私のJSONオブジェクト:

"placemarks": [{ 
      "address": "xxxstreet 170, 43023 City", 
      "coordinates": [ 
       10.07526, 
       53.59301, 
       0 
      ], 
      "engineType": "CE", 
      "exterior": "UNACCEPTABLE", 
      "fuel": 42, 
      "interior": "UNACCEPTABLE", 
      "name": "xxx", 
      "vin": "xxx" 
     }, 

My活動:

public class MainActivity extends Activity { 

ListView lvCars; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    DownloadTask task = new DownloadTask(); 
    task.execute("http://example.com"); 

    lvCars = (ListView) findViewById(R.id.listViewCars); 

} 

public class DownloadTask extends AsyncTask <String, String, List<JSONModels> >{ 

    @Override 
    protected List<JSONModels> doInBackground(String... params) { 

     String result = ""; 
     URL url; 
     HttpURLConnection urlConnection = null; 

     try { 

      url = new URL(params[0]); 

      urlConnection = (HttpURLConnection) url.openConnection(); 

      //holds the Input of data 
      InputStream inputStream = urlConnection.getInputStream(); 
      InputStreamReader reader = new InputStreamReader(inputStream); 

      int data = reader.read(); 

      while (data != -1) { 

       char current = (char) data; 

       result += current; 

       data = reader.read(); 
      } 


     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     List<JSONModels> jsonModelsList = null; 
     try { 
      JSONObject jsonObject = new JSONObject(result); 
      String placemarks = jsonObject.getString("placemarks"); 
      JSONArray jsonArray = new JSONArray(placemarks); 

      jsonModelsList = new ArrayList<>(); 

      for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject jsonPart = jsonArray.getJSONObject(i); 
       JSONModels jsonModels = new JSONModels(); 
       jsonModels.setName(jsonPart.getString("name")); 
       jsonModels.setAddress(jsonPart.getString("address")); 
       jsonModels.setExterior(jsonPart.getString("exterior")); 
       jsonModels.setInterior(jsonPart.getString("interior")); 
       jsonModels.setFuel(jsonPart.getInt("fuel")); 

       List<JSONModels.coordinates> coordinatesList = new ArrayList<>(); 
       for (int j = 0; j < jsonPart.getJSONArray("coordinates").length(); j++) { 
        JSONModels.coordinates coordinates = new JSONModels.coordinates(); 
        coordinates.setCoordinates(jsonPart.getJSONArray("coordinates").getJSONObject(j).getDouble("coordinates")); 
        coordinatesList.add(coordinates); 
       } 
       jsonModels.setCoordinateslist(coordinatesList); 
       jsonModelsList.add(jsonModels); 

      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return jsonModelsList; 
    } 

    @Override 
    protected void onPostExecute(List<JSONModels> result) { 
     super.onPostExecute(result); 

     CarAdapter adapter = new CarAdapter(getApplicationContext(), R.layout.row, result); 
     lvCars.setAdapter(adapter); 

    } 
} 

public class CarAdapter extends ArrayAdapter{ 

    private List<JSONModels> carModelList; 
    private int resource; 
    private LayoutInflater inflater; 
    public CarAdapter(Context context, int resource, List<JSONModels> objects) { 
     super(context, resource, objects); 
     carModelList = objects; 
     this.resource = resource; 
     inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if(convertView == null){ 
      convertView = inflater.inflate(resource, null); 
     } 

     ImageView ivIcon; 
     TextView tvAddress; 
     TextView tvName; 
     TextView tvExterior; 
     TextView tvInterior; 
     TextView tvFuel; 

     ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon); 
     tvAddress = (TextView) convertView.findViewById(R.id.tvAddress); 
     tvName = (TextView) convertView.findViewById(R.id.tvName); 
     tvExterior = (TextView) convertView.findViewById(R.id.tvExterior); 
     tvInterior = (TextView) convertView.findViewById(R.id.tvInterior); 
     tvFuel = (TextView) convertView.findViewById(R.id.tvFuel); 

     tvAddress.setText(carModelList.get(position).getAddress()); 
     tvName.setText(carModelList.get(position).getName()); 
     tvExterior.setText("Exterior: "+ carModelList.get(position).getExterior()); 
     tvInterior.setText("Interior: " + carModelList.get(position).getInterior()); 
     tvFuel.setText("Fuel: " + carModelList.get(position).getFuel()); 

     return convertView; 
    } 
} 
} 
+1

例外テキストはかなり自明です。 'getJSONArray(" coordinates ")。getDouble(index)'を使用してください。 for-loopのコードはあまり意味がありません。 – SqueezyMo

答えて

1

をやるべきは次のように試してみてくださいこれは:

try { 
     JSONObject jsonObject = new JSONObject(""); 
     JSONArray placemarks = jsonObject.optJSONArray("placemarks"); 

     for(int i = 0; i< placemarks.length(); i++){ 
      JSONObject marker = placemarks.getJSONObject(i); 
      JSONArray coordinates = marker.optJSONArray("coordinates"); 
      double lat = coordinates.optDouble(0); 
      double lng = coordinates.optDouble(1); 
     } 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
0

それはあなたがそれを解析する方法ではないので、あなたがこの

jsonPart.getJSONArray("coordinates").getDouble(j) 
0

jsonを扱う別の方法は、POJOクラスのGsonを使用しています。

1)は、そのサイトを見てください:Jsonschema2pojo

2)gson dependecy追加:compile 'com.google.code.gson:gson:2.3.1'

3)をウェブサイトにあなたの例のJSON形式を貼り付け、POJOクラスを作成します。 Javaコードで

4):

Gson gson = new GsonBuilder().create(); 

YourPojoClass pojo=new YourPojoClass(); 

try { 
    pojo=gson.fromJson(yourjsonresponse.toString(),YourPojoClass.class); 
    } catch (IOException e) {// handle io errors} 
関連する問題