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