You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio当前位置附近地点显示异常问题排查

问题排查:Android 附近地点显示重启后失效

我在Android Studio中实现显示当前位置附近餐厅的功能,首次运行点击按钮时能正常显示结果,但退出APP后再次进入,点击按钮却没有内容展示。已尝试清理项目等方法,无效。以下是主类中的findRestaurants方法及getNearbyPlaces异步任务代码,请帮忙排查是否存在代码问题?

相关代码

public void findRestaurants(View v){
    StringBuilder stringBuilder = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
    stringBuilder.append("location="+latLngCurrent.latitude + "," +latLngCurrent.longitude);
    stringBuilder.append("&radius="+5000);
    stringBuilder.append("&keyword="+"restaurant");
    stringBuilder.append("&key="+getResources().getString(R.string.google_map_keyy));

    String url = stringBuilder.toString();

    Object dataTransfer[] = new Object[2];
    dataTransfer[0] = mMap;
    dataTransfer[1] = url;

    getNearbyPlaces getnearbyPlaces = new getNearbyPlaces();
    getnearbyPlaces.execute(dataTransfer);
}

public class getNearbyPlaces extends AsyncTask<Object,String,String> {
   GoogleMap mMap;
   String url;
   InputStream is;
   BufferedReader bufferedReader;
   StringBuilder stringBuilder;
   String data;
    @Override
    protected String doInBackground(Object... objects) {
        mMap = (GoogleMap)objects[0];
        url = (String)objects[1];

        try {
            URL myurl = new URL(url);
            HttpURLConnection httpURLConnection = (HttpURLConnection) myurl.openConnection();
            httpURLConnection.connect();
            is = httpURLConnection.getInputStream();
            bufferedReader = new BufferedReader(new InputStreamReader(is));

            String line = "";
            stringBuilder = new StringBuilder();

            while((line = bufferedReader.readLine() ) != null){
                stringBuilder.append(line);
            }
            data = stringBuilder.toString();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data;
    }

    @Override
    protected void onPostExecute(String s) {

        try {
            JSONObject parentObject = new JSONObject(s);
            JSONArray resultsArray = parentObject.getJSONArray("results");

            for (int i = 0; i<resultsArray.length(); i++){
                JSONObject jsonObject = resultsArray.getJSONObject(i);
                JSONObject locationObj = jsonObject.getJSONObject("geometry").getJSONObject("location");

                String latitude = locationObj.getString("lat");
                String longitude = locationObj.getString("lng");

                JSONObject nameObject = resultsArray.getJSONObject(i);
                String name_restaurant =  nameObject.getString("name");
                String vicinity = nameObject.getString("vicinity");

                LatLng latLng = new LatLng(Double.parseDouble(latitude),Double.parseDouble(longitude));

                MarkerOptions markeroptions = new MarkerOptions();
                markeroptions.title(vicinity);
                markeroptions.position(latLng);

                mMap.addMarker(markeroptions);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

可能的问题及修复建议

  • 位置变量latLngCurrent未重新初始化
    退出APP后重启,latLngCurrent可能未重新获取有效位置(比如位置权限未重新授权、位置更新逻辑未触发),导致请求URL中的location参数无效,Places API返回空结果。
    修复:调用findRestaurants前先检查latLngCurrent是否非空且有效,若无效则重新触发位置获取流程(比如请求位置权限、调用FusedLocationProviderClient获取最新位置)。

  • GoogleMap实例失效
    重启后MapFragment可能已重新创建,但全局mMap引用仍指向旧实例,异步任务中调用mMap.addMarker无法在新地图上显示标记。
    修复:确保每次调用findRestaurants时,mMap是通过onMapReady回调获取的最新有效实例,或者在方法内从MapFragment重新获取mMap。

  • 网络请求异常未处理
    异步任务捕获异常仅打印堆栈,未返回错误标识,若重启后网络异常、API密钥配额耗尽等,onPostExecute解析空字符串会抛出异常但无提示,导致无内容展示。
    修复:在doInBackground中处理异常时返回错误信息,onPostExecute先判断s是否为空或无效,再进行解析,同时添加Toast提示用户请求失败。

  • 标记堆积(次要)
    每次点击按钮都会新增标记,未清空旧标记,虽不导致重启后无内容,但会造成地图标记混乱,建议添加标记前调用mMap.clear()。

内容的提问来源于stack exchange,提问作者UserRW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:45:37