Я получаю вышеуказанную ошибку при попытке использовать MapView в Android для отображения точек на карте, используя значения, полученные из чтения JSON. Карта отлично работает и отображает контрольные точки, значения, которые я установил вручную, но при этом я могу получить ошибку «не удалось найти информацию о поставщике для com.google.settings» при инициализации строки, форматированной как структура JSON, а затем попытаться прочитайте значения из него.Получение «не удалось найти информацию о поставщике для com.google.settings» в Android при попытке прочитать структуру JSON
Примечание: У меня уже есть ключ API Google Maps. Я также установил интернет-разрешения. Я могу подключиться к веб-сайту с запросом HttpGet и получить там структуру JSON. Карта отображается правильно, если я вытащил try/catch с кодом чтения JSON, но в противном случае выдает вышеупомянутую ошибку.
Вот код:
package com.android.google.maps;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.LinearLayout;
public class PointMap extends MapActivity {
/** variables */
LinearLayout linearLayout;
MapView mapView;
List<Overlay> mapOverlays;
Drawable drawable;
PointsItemizedOverlay itemizedOverlay;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapOverlays = mapView.getOverlays();
drawable = this.getResources().getDrawable(R.drawable.androidmarker);
itemizedOverlay = new PointsItemizedOverlay(drawable);
//test points
GeoPoint point = new GeoPoint(19240000,-99120000);
OverlayItem overlayitem = new OverlayItem(point, "", "");
itemizedOverlay.addOverlay(overlayitem);
GeoPoint point2 = new GeoPoint(35410000, 139460000);
OverlayItem overlayitem2 = new OverlayItem(point2, "", "");
itemizedOverlay.addOverlay(overlayitem2);
String jStringTest = "{\"points\": [{\"id\": 00001, \"latitude\": 45.721535000000003, \"longitude\": -78.957449999999994}," +
" {\"id\": 00002, \"latitude\": 39.722852000000003, \"longitude\": -56.008089999999996}]}";
try {
JSONObject jObject = new JSONObject(jStringTest);
JSONArray pointArray = jObject.getJSONArray("points");
for (int i = 0; i < pointArray.length(); i++) {
String pointId = pointArray.getJSONObject(i).getString("id");
double pointLatitude = pointArray.getJSONObject(i).getDouble("latitude");
double pointLongitude = pointArray.getJSONObject(i).getDouble("longitude");
GeoPoint point3 = new GeoPoint((int) (pointLatitude*Math.pow(10, 6)), (int) (pointLongitude*Math.pow(10, 6)));
OverlayItem overlayitem3 = new OverlayItem(point3, "", "");
itemizedOverlay.addOverlay(overlayitem3);
}
} catch (Exception e) {System.out.println("Exception");};
mapOverlays.add(itemizedOverlay);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
@MarvinPinto Да, и, как я заявил в вопросе, отсутствие ключа API карт не является проблемой - карта работает, но по какой-то причине терпит неудачу и дает вышеупомянутую ошибку если я поставил код для анализа строки JSON. – tildeATHcoder