getMapAsync 错误 - Google 地图 api android

2023-12-28

因此,我尝试从 Json 文件在地图上显示标记,但它们没有出现,我已将其范围缩小到该行

map = mapFragment.getMapAsync(this);

它给了我错误

不兼容的类型: 必需:com.google.android.gms.maps.GoogleMap 找到:无效

这是其余的代码:

public class MainActivity extends FragmentActivity implements OnMapReadyCallback {
private static final String LOG_TAG = "ExampleApp";

private static final String SERVICE_URL = "https://api.myjson.com/bins/4jb09";

protected GoogleMap map;

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

@Override
protected void onResume() {
    super.onResume();
    setUpMapIfNeeded();
}

private void setUpMapIfNeeded() {
    if (map == null) {
        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        map = mapFragment.getMapAsync(this);

        if (map != null) {
            //setUpMap();
            new MarkerTask().execute();
        }
    }
}

@Override
public void onMapReady(GoogleMap googleMap) {
    map = googleMap;
    setUpMap();
}

private void setUpMap() {
    // Retrieve the city data from the web service
    // In a worker thread since it's a network operation.
    new Thread(new Runnable() {
        public void run() {
            try {
                retrieveAndAddCities();
            } catch (IOException e) {
                Log.e(LOG_TAG, "Cannot retrive cities", e);
                return;
            }
        }
    }).start();
}

protected void retrieveAndAddCities() throws IOException {
    HttpURLConnection conn = null;
    final StringBuilder json = new StringBuilder();
    try {
        // Connect to the web service
        URL url = new URL(SERVICE_URL);
        conn = (HttpURLConnection) url.openConnection();
        InputStreamReader in = new InputStreamReader(conn.getInputStream());

        // Read the JSON data into the StringBuilder
        int read;
        char[] buff = new char[1024];
        while ((read = in.read(buff)) != -1) {
            json.append(buff, 0, read);
        }
    } catch (IOException e) {
        Log.e(LOG_TAG, "Error connecting to service", e);
        throw new IOException("Error connecting to service", e);
    } finally {
        if (conn != null) {
            conn.disconnect();
        }
    }

    // Create markers for the city data.
    // Must run this on the UI thread since it's a UI operation.
    runOnUiThread(new Runnable() {
        public void run() {
            try {
                createMarkersFromJson(json.toString());
            } catch (JSONException e) {
                Log.e(LOG_TAG, "Error processing JSON", e);
            }
        }
    });
}

void createMarkersFromJson(String json) throws JSONException {
    // De-serialize the JSON string into an array of city objects
    JSONArray jsonArray = new JSONArray(json);
    for (int i = 0; i < jsonArray.length(); i++) {
        // Create a marker for each city in the JSON data.
        JSONObject jsonObj = jsonArray.getJSONObject(i);
        map.addMarker(new MarkerOptions()
                .title(jsonObj.getString("name"))
                .snippet(Integer.toString(jsonObj.getInt("population")))
                .position(new LatLng(
                        jsonObj.getJSONArray("latlng").getDouble(0),
                        jsonObj.getJSONArray("latlng").getDouble(1)
                ))
        );
    }
}



private class MarkerTask extends AsyncTask<Void, Void, String> {

    private static final String LOG_TAG = "ExampleApp";

    private static final String SERVICE_URL = "https://api.myjson.com/bins/4jb09";

    // Invoked by execute() method of this object
    @Override
    protected String doInBackground(Void... args) {

        HttpURLConnection conn = null;
        final StringBuilder json = new StringBuilder();
        try {
            // Connect to the web service
            URL url = new URL(SERVICE_URL);
            conn = (HttpURLConnection) url.openConnection();
            InputStreamReader in = new InputStreamReader(conn.getInputStream());

            // Read the JSON data into the StringBuilder
            int read;
            char[] buff = new char[1024];
            while ((read = in.read(buff)) != -1) {
                json.append(buff, 0, read);
            }
        } catch (IOException e) {
            Log.e(LOG_TAG, "Error connecting to service", e);
            //throw new IOException("Error connecting to service", e); //uncaught
        } finally {
            if (conn != null) {
                conn.disconnect();
            }
        }

        return json.toString();
    }

    // Executed after the complete execution of doInBackground() method
    @Override
    protected void onPostExecute(String json) {

        try {
            // De-serialize the JSON string into an array of city objects
            JSONArray jsonArray = new JSONArray(json);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObj = jsonArray.getJSONObject(i);

                LatLng latLng = new LatLng(jsonObj.getJSONArray("latlng").getDouble(0),
                        jsonObj.getJSONArray("latlng").getDouble(1));

                //move CameraPosition on first result
                if (i == 0) {
                    CameraPosition cameraPosition = new CameraPosition.Builder()
                            .target(latLng).zoom(13).build();

                    map.animateCamera(CameraUpdateFactory
                            .newCameraPosition(cameraPosition));
                }

                // Create a marker for each city in the JSON data.
                map.addMarker(new MarkerOptions()
                        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))
                        .title(jsonObj.getString("name"))
                        .snippet(Integer.toString(jsonObj.getInt("population")))
                        .position(latLng));
            }
        } catch (JSONException e) {
            Log.e(LOG_TAG, "Error processing JSON", e);
        }

    }
}

}


将其更改为

map.getMapAsync(this);

代替

map = mapFragment.getMapAsync(this);

because

@Override
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap; 

}

该方法的返回类型为void,因此不会返回任何内容。 你必须这样做:

map.getMapAsync(this)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getMapAsync 错误 - Google 地图 api android 的相关文章

随机推荐

  • 如何在 Maven 原型中提供自定义逻辑?

    我对创建 Maven 原型很感兴趣 并且我认为我已经掌握了大部分基础知识 然而 我坚持的一件事是有时我想使用自定义逻辑来填充模板 例如 如果有人生成我的原型并将artifactId指定为hello world 我想生成一个名为HelloWo
  • 在不同项目中对 WebAPI 和 Asp.Net Core 使用同一个身份

    我有一个包含 2 个点网核心项目的解决方案 Web API 网络应用程序 MVC Web 应用程序是 Web API 使用者 我的网络应用程序控制器将使用httpclient为了获取数据 我使用 razor 作为客户端 没有 Angular
  • 使用 Composer create-project 拉取最新提交

    我想用composer create project始终提取我正在使用的开发版本的最新提交 我注意到一个类似的问题 https stackoverflow com questions 36600849 composer create pro
  • JavaFX fxml - 如何将 Spring DI 与嵌套自定义控件一起使用?

    我已经阅读了许多有关将 Spring DI 与 JavaFx 集成的教程 但我遇到了简单示例无法涵盖的障碍 而且我无法弄清楚 我希望视图层和表示层之间完全分离 我想使用 fxml 来定义可组合视图 并使用 Spring 将它们连接在一起 这
  • 当日期选择器关闭时调用函数,当我仅单击日期选择器外部时

    是否可以将日期选择器设置为仅在我单击日期选择器外部时关闭 关闭日历时 如果选择了日期 alertDate函数被调用 代码在这里 https stackblitz com edit react o8dm7y https stackblitz
  • 在函数外部访问函数变量?

    我是初学者 这是我正在上的课程 我知道关于return 但它不允许我在这段代码中做我想做的事情 这是包含变量的函数 def disp cookies This stuff is just for a print display inx 0
  • 在运行时动态修改符号表(C语言)

    是否可以在C运行时动态修改符号表 Linux上的elf格式 我的最终目标如下 在某些函数里面说foo 我想覆盖malloc函数到我的自定义处理程序my malloc 但在外面foo any malloc仍应像 glibc 中那样调用 mal
  • 系统时间与 apache 时间戳不同--?

    我在开发服务器上 当我在 php 中执行此操作时 echo date r time 回复 2010 年 6 月 1 日 星期二 18 10 32 0400 但是 我的计算机时间是 17 10 32 即时时间为 GMT 5 我在哪里配置 ap
  • 是否可以仅更改文本阴影的颜色?

    我有 9 个不同颜色的按钮 红色 橙色 黄色 绿色 蓝色 紫色 粉色 灰白色和石板色 我想知道是否可以仅操纵和更改按钮的颜色text shadow这些按钮的 CSS 属性 同时保持其他值相同 例如 我有两个不同的班级 一个用于 11px 字
  • pandas 返回未命名的列

    以下是我在 Excel 工作表中的数据示例 A B C 1 2 3 4 5 6 我正在尝试使用以下代码获取列名称 p1 list df1t columns values 输出是这样的 A B C Unnamed 3 unnamed 4 un
  • 如何打印包含值的列

    假设我有一个包含以下内容的数据文件 1 2 3 4 5 67 88 12 32 22 9 99 34 59 86 17 0 78 0 77 11 0 0 0 43 我想要一个在每一列中搜索数字 0 的代码 如果找到数字 0 代码将在单独的文
  • 如何使 XmlnsDefinition 在本地程序集上工作?

    我开始使用 XmlnsDefinition 属性将一些 CLR 命名空间绑定到单个 xmlns 中 以便在 XAML 中使用 不幸的是 这似乎只在使用外部程序集时才有效 如果我在与我从 XmlnsDefinition 引用的命名空间中的类型
  • 似乎无法使用 Expo 的 Font.loadAsync 加载自定义字体

    我正在将 React Native 与 Expo 结合使用 除了自定义字体的问题之外 一切都很顺利 我有我的字体Lobster Regular ttf在 assets fonts 中 我一直在尝试加载它 如官方文档中所示 component
  • Android 风格微调器

    我正在努力让我的 Android 应用程序变得更时尚 并取得了一些进展 但旋转下拉菜单给我带来了麻烦 我有一个屏幕截图来向您展示问题 我想要的是背景中的白色框是透明的 就像在后屏幕上与下拉菜单之外的屏幕其余部分一样的灰色覆盖层中 如果我没记
  • kubernetes cronjob 并更新秘密

    下面是我的 python 脚本 用于更新密钥 以便我可以使用 kubectl 部署到 kubernetes 所以它工作得很好 但我想创建一个 kubernetes cron 作业 它将运行 docker 容器来更新 kubernetes 集
  • 无法在 Javadoc 注释中链接到 JDK10

    从 Java 9 升级到 10 后 使用 Javadoc 工具生成文档时 例如 对于导入文件 指向 JDK 的链接不再起作用java util Optional link Optional 呈现为Optional而不是作为Optional
  • 带有layout_width=matchparent 的TableLayout 不匹配父级

    我有一个包含两列和两行的 tableLayout 两行和最后一列的宽度都有 match parent 但布局没有填充父宽度 它的表现就像有 wrap content 一样 这是代码
  • Keras + TensorFlow:“模块‘tensorflow’没有属性‘merge_all_summaries’”

    非常类似于Keras tensorflow 给出错误 no attribute control flow ops https stackoverflow com questions 40046619 keras tensorflow giv
  • 如何扩展文本区域以垂直和水平适应文本?

    我怎样才能使用 html css 和 jquery 来做这样的事情 我发现这个问题根据内容长度调整文本区域大小 https stackoverflow com questions 995168 textarea to resize base
  • getMapAsync 错误 - Google 地图 api android

    因此 我尝试从 Json 文件在地图上显示标记 但它们没有出现 我已将其范围缩小到该行 map mapFragment getMapAsync this 它给了我错误 不兼容的类型 必需 com google android gms map