2012-02-06 1 views
-1

Я получаю вышеуказанную ошибку при попытке использовать 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; 
    } 

} 
+0

@MarvinPinto Да, и, как я заявил в вопросе, отсутствие ключа API карт не является проблемой - карта работает, но по какой-то причине терпит неудачу и дает вышеупомянутую ошибку если я поставил код для анализа строки JSON. – tildeATHcoder

ответ

1

Попробуйте

spotLatitude * Math.pow (10, 6), а не использовать spotLatitude * 1E6.

Вы точно не указали ошибку. Какая ошибка. попытайтесь опубликовать сообщение об ошибке, которое вы получили в logcat

+0

Ошибка в заголовке сообщения: «не удалось найти информацию о поставщике для com.google.settings» Также я попробовал ваше предложение, тот же результат. – tildeATHcoder

+0

Убедитесь, что вы предоставили разрешения в Интернете в файле манифеста и использовали карты api key. [Нажмите здесь] (http://stackoverflow.com/questions/1988078/android-failed-to-find-provider-info-for-com-google-settings-in-mapview-exampl) для получения более подробной информации – sudheer

+0

У меня уже есть сделанное это - карта уже работает, но не получается, когда я по какой-то причине поместил код JSON. – tildeATHcoder