安装应用时未显示的权限

时间:2013-03-03 14:30:49

标签: android json google-places-api

我在尝试访问Google Places API时获得了json exception end of input at character 0(生成的网址没问题,关键是可以的)。在清单中,我设置了权限ACCESS_FINE_LOCATIONSINTERNET,但是在真实设备上安装时只会显示GPS。

我的代码是从this问题的答案逐字复制的。

编辑:代码

public class Place {
    private String id;
    private String icon;
    private String name;
    private String vicinity;
    private Double latitude;
    private Double longitude;

   static Place jsonToPontoReferencia(JSONObject pontoReferencia) {
        try {
            Place result = new Place();
            JSONObject geometry = (JSONObject) pontoReferencia.get("geometry");
            JSONObject location = (JSONObject) geometry.get("location");
            result.setLatitude((Double) location.get("lat"));
            result.setLongitude((Double) location.get("lng"));
            result.setIcon(pontoReferencia.getString("icon"));
            result.setName(pontoReferencia.getString("name"));
            result.setVicinity(pontoReferencia.getString("vicinity"));
            result.setId(pontoReferencia.getString("id"));
            return result;
        } catch (JSONException ex) {
            Logger.getLogger(Place.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    @Override
    public String toString() {
        return "Place{" + "id=" + id + ", icon=" + icon + ", name=" + name + ", latitude=" + latitude + ", longitude=" + longitude + '}';
    }

}

public class PlacesService {

    private String API_KEY;

    public PlacesService(String apikey) {
        this.API_KEY = apikey;
    }

    public void setApiKey(String apikey) {
        this.API_KEY = apikey;
    }

    public List<Place> findPlaces(double latitude, double longitude,String placeSpacification) 
    {

        String urlString = makeUrl(latitude, longitude,placeSpacification);


        try {
            String json = getJSON(urlString);

            System.out.println(json);
            JSONObject object = new JSONObject(json);
            JSONArray array = object.getJSONArray("results");


            ArrayList<Place> arrayList = new ArrayList<Place>();
            for (int i = 0; i < array.length(); i++) {
                try {
                    Place place = Place.jsonToPontoReferencia((JSONObject) array.get(i));

                    Log.v("Places Services ", ""+place);


                    arrayList.add(place);
                } catch (Exception e) {
                }
            }
            return arrayList;
        } catch (JSONException ex) {
            Logger.getLogger(PlacesService.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    private String makeUrl(double latitude, double longitude,String place) {
         StringBuilder urlString = new StringBuilder("https://maps.googleapis.com/maps/api/place/search/json?");

        if (place.equals("")) {
                urlString.append("&location=");
                urlString.append(Double.toString(latitude));
                urlString.append(",");
                urlString.append(Double.toString(longitude));
                urlString.append("&radius=100");
                //urlString.append("&types=bus_station");
                urlString.append("&sensor=false&key=" + API_KEY);
        } else {
                urlString.append("&location=");
                urlString.append(Double.toString(latitude));
                urlString.append(",");
                urlString.append(Double.toString(longitude));
                urlString.append("&radius=100");
               // urlString.append("&types="+place);
                urlString.append("&sensor=false&key=" + API_KEY);
        }
        System.out.println(urlString.toString());

        return urlString.toString();

    }

    protected String getJSON(String url) {
        return getUrlContents(url);
    }

    private String getUrlContents(String theUrl) 
    {
        StringBuilder content = new StringBuilder();

        try {
            URL url = new URL(theUrl);
            URLConnection urlConnection = url.openConnection();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()), 8);
            String line;
            while ((line = bufferedReader.readLine()) != null) 
            {
                content.append(line + "\n");
            }

            bufferedReader.close();
        }

        catch (Exception e)
        {

            e.printStackTrace();

        }

        return content.toString();
    }
}

public class MainActivity extends FragmentActivity{

private String[] placeName;
private String[] imageUrl;

double longitude, latitude;

TextView status, location;

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

    status = (TextView)findViewById(R.id.status);
    location = (TextView)findViewById(R.id.location);

    status.setText("STATUS");


    LocationManager mlocManager = (LocationManager)getSystemService(this.LOCATION_SERVICE);
    LocationListener mlocListener = new MyLocationListener();
    mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);


}

public void findNearLocation()   {

    PlacesService service = new PlacesService("mykey");



      List<Place> findPlaces = service.findPlaces(longitude,latitude,"");

        placeName = new String[findPlaces.size()];
        imageUrl = new String[findPlaces.size()];

      for (int i = 0; i < findPlaces.size(); i++) {

          Place placeDetail = findPlaces.get(i);
          placeDetail.getIcon();

        System.out.println(  placeDetail.getName());
        placeName[i] =placeDetail.getName();

        imageUrl[i] =placeDetail.getIcon();

    }

      location.setText(placeName[0]);




}

public class MyLocationListener implements LocationListener

{

    @Override
    public void onLocationChanged(Location location) {

        longitude = location.getLongitude();
        latitude = location.getLatitude();

        String text = "You are at: long "+longitude+" lat: "+latitude;
        status.setText(text);
        try{
        findNearLocation();
        }
        catch(Exception e){
            status.setText("Eroare");
        }


    }

清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ioana.howsmypatient"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="15" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>


    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="ioana.howsmypatient.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

0 个答案:

没有答案