Java 我的应用程序中没有从我的应用程序中查找附近位置的错误。但不显示附近的地方

Java 我的应用程序中没有从我的应用程序中查找附近位置的错误。但不显示附近的地方,java,android,google-maps-android-api-2,google-places-api,Java,Android,Google Maps Android Api 2,Google Places Api,我是android的新手,在google地图和google places api上工作。从上个月开始一直在搜索。但我不是成功者。 我正在开发一个应用程序,任何人都可以从他/她的位置找到最近的医院/实验室。 请帮我找出问题所在。我会很感激的 这是我的舱单 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" packag

我是android的新手,在google地图和google places api上工作。从上个月开始一直在搜索。但我不是成功者。 我正在开发一个应用程序,任何人都可以从他/她的位置找到最近的医院/实验室。 请帮我找出问题所在。我会很感激的

这是我的舱单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.naqvi.myapplication">

<!--
     The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
     Google Maps Android API v2, but you must specify either coarse or fine
     location permissions for the 'MyLocation' functionality. 
-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="in.wptrafficanalyzer.locationgeocodingv2.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<uses-permission android:name="com.javapapers.android.googleplacesdetail.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />
<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="@string/google_maps_key" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <!--
         The API key for Google Maps-based APIs is defined as a string resource.
         (See the file "res/values/google_maps_api.xml").
         Note that the API key is linked to the encryption key used to sign the APK.
         You need a different API key for each encryption key, including the release key that is used to
         sign the APK for publishing.
         You can define the keys for the debug and release targets in src/debug/ and src/release/. 
    -->
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_key" />

    <activity
        android:name=".MapsActivity"
        android:label="@string/title_activity_maps">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
这是我的
GooglePlaceReadTask类

public class GooglePlacesReadTask extends AsyncTask<Object, Integer, String> {
String googlePlacesData = null;
GoogleMap googleMap;

@Override
protected String doInBackground(Object... inputObj) {
    try {
        googleMap = (GoogleMap) inputObj[0];
        String googlePlacesUrl = (String) inputObj[1];
        Http http = new Http();
        googlePlacesData = http.read(googlePlacesUrl);
    } catch (Exception e) {
        Log.d("Google Place Read Task", e.toString());
    }
    return googlePlacesData;
}

@Override
protected void onPostExecute(String result) {
    PlacesDisplayTask placesDisplayTask = new PlacesDisplayTask();
    Object[] toPass = new Object[2];
    toPass[0] = googleMap;
    toPass[1] = result;
    placesDisplayTask.execute(toPass);
}
}
这是
Places
class

public class Http {

public String read(String httpUrl) throws IOException {
    String httpData = "";
    InputStream inputStream = null;
    HttpURLConnection httpURLConnection = null;
    try {
        URL url = new URL(httpUrl);
        httpURLConnection = (HttpURLConnection) url.openConnection();
        httpURLConnection.connect();
        inputStream = httpURLConnection.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        StringBuffer stringBuffer = new StringBuffer();
        String line = "";
        while ((line = bufferedReader.readLine()) != null) {
            stringBuffer.append(line);
        }
        httpData = stringBuffer.toString();
        bufferedReader.close();
    } catch (Exception e) {
        Log.d("Exception - reading Http url", e.toString());
    } finally {
        inputStream.close();
        httpURLConnection.disconnect();
    }
    return httpData;
}
}
public class Places {

public List<HashMap<String, String>> parse(JSONObject jsonObject) {
    JSONArray jsonArray = null;
    try {
        jsonArray = jsonObject.getJSONArray("results");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return getPlaces(jsonArray);
}

private List<HashMap<String, String>> getPlaces(JSONArray jsonArray) {
    int placesCount = jsonArray.length();
    List<HashMap<String, String>> placesList = new ArrayList<HashMap<String, String>>();
    HashMap<String, String> placeMap = null;

    for (int i = 0; i < placesCount; i++) {
        try {
            placeMap = getPlace((JSONObject) jsonArray.get(i));
            placesList.add(placeMap);

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

private HashMap<String, String> getPlace(JSONObject googlePlaceJson) {
    HashMap<String, String> googlePlaceMap = new HashMap<String, String>();
    String placeName = "-NA-";
    String vicinity = "-NA-";
    String latitude = "";
    String longitude = "";
    String reference = "";

    try {
        if (!googlePlaceJson.isNull("name")) {
            placeName = googlePlaceJson.getString("name");
        }
        if (!googlePlaceJson.isNull("vicinity")) {
            vicinity = googlePlaceJson.getString("vicinity");
        }
        latitude = googlePlaceJson.getJSONObject("geometry").getJSONObject("location").getString("lat");
        longitude = googlePlaceJson.getJSONObject("geometry").getJSONObject("location").getString("lng");
        reference = googlePlaceJson.getString("reference");
        googlePlaceMap.put("place_name", placeName);
        googlePlaceMap.put("vicinity", vicinity);
        googlePlaceMap.put("lat", latitude);
        googlePlaceMap.put("lng", longitude);
        googlePlaceMap.put("reference", reference);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return googlePlaceMap;
}
}

我从这个链接中得到了答案。。问题是关于服务器密钥的。我放置的是我的android api密钥,而不是服务器密钥。。我现在有另一个问题。我的应用程序只有在第一次运行时才起作用。如果我修改类并尝试运行它,PLZ将无法帮助我识别该问题。我创建了另一个服务器密钥,并在创建服务器密钥时提供了笔记本电脑的ip地址。并卸载应用程序并多次重新安装。也清除了缓存,但现在我的应用程序不工作,当我点击“查找”按钮时,什么都没有发生。我已经从这个链接得到了答案。。问题是关于服务器密钥的。我放置的是我的android api密钥,而不是服务器密钥。。我现在有另一个问题。我的应用程序只有在第一次运行时才起作用。如果我修改类并尝试运行它,PLZ将无法帮助我识别该问题。我创建了另一个服务器密钥,并在创建服务器密钥时提供了笔记本电脑的ip地址。并卸载应用程序并多次重新安装。也清除了缓存,但现在当我点击“查找”按钮时,我的应用程序不工作,什么也没发生
public class Places {

public List<HashMap<String, String>> parse(JSONObject jsonObject) {
    JSONArray jsonArray = null;
    try {
        jsonArray = jsonObject.getJSONArray("results");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return getPlaces(jsonArray);
}

private List<HashMap<String, String>> getPlaces(JSONArray jsonArray) {
    int placesCount = jsonArray.length();
    List<HashMap<String, String>> placesList = new ArrayList<HashMap<String, String>>();
    HashMap<String, String> placeMap = null;

    for (int i = 0; i < placesCount; i++) {
        try {
            placeMap = getPlace((JSONObject) jsonArray.get(i));
            placesList.add(placeMap);

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

private HashMap<String, String> getPlace(JSONObject googlePlaceJson) {
    HashMap<String, String> googlePlaceMap = new HashMap<String, String>();
    String placeName = "-NA-";
    String vicinity = "-NA-";
    String latitude = "";
    String longitude = "";
    String reference = "";

    try {
        if (!googlePlaceJson.isNull("name")) {
            placeName = googlePlaceJson.getString("name");
        }
        if (!googlePlaceJson.isNull("vicinity")) {
            vicinity = googlePlaceJson.getString("vicinity");
        }
        latitude = googlePlaceJson.getJSONObject("geometry").getJSONObject("location").getString("lat");
        longitude = googlePlaceJson.getJSONObject("geometry").getJSONObject("location").getString("lng");
        reference = googlePlaceJson.getString("reference");
        googlePlaceMap.put("place_name", placeName);
        googlePlaceMap.put("vicinity", vicinity);
        googlePlaceMap.put("lat", latitude);
        googlePlaceMap.put("lng", longitude);
        googlePlaceMap.put("reference", reference);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return googlePlaceMap;
}
}
JSONObject googlePlacesJson;
GoogleMap googleMap;

@Override
protected List<HashMap<String, String>> doInBackground(Object... inputObj) {

    List<HashMap<String, String>> googlePlacesList = null;
    Places placeJsonParser = new Places();

    try {
        googleMap = (GoogleMap) inputObj[0];
        googlePlacesJson = new JSONObject((String) inputObj[1]);
        googlePlacesList = placeJsonParser.parse(googlePlacesJson);
    } catch (Exception e) {
        Log.d("Exception", e.toString());
    }
    return googlePlacesList;
}

@Override
protected void onPostExecute(List<HashMap<String, String>> list) {
    googleMap.clear();
    for (int i = 0; i < list.size(); i++) {
        MarkerOptions markerOptions = new MarkerOptions();
        HashMap<String, String> googlePlace = list.get(i);
        double lat = Double.parseDouble(googlePlace.get("lat"));
        double lng = Double.parseDouble(googlePlace.get("lng"));
        String placeName = googlePlace.get("place_name");
        String vicinity = googlePlace.get("vicinity");
        LatLng latLng = new LatLng(lat, lng);
        markerOptions.position(latLng);
        markerOptions.title(placeName + " : " + vicinity);
        googleMap.addMarker(markerOptions);
    }
}
}