如何在Android Studio中修复不可转换的类型

时间:2019-08-04 20:51:01

标签: google-maps android-studio

我正在尝试在Android Studio中启动基于Google地图的应用程序。我按照说明开始了Google Maps活动。

然后我按照说明创建了一个API密钥,并启用了maps SDK android for android并将密钥复制到了应用程序中。

但是当我尝试运行该应用程序(不做任何更改)时,出现此错误:

Inconvertible types; cannot cast 'android.support.v4.app.Fragment' to 'com.google.android.gms.maps.SupportMapFragment' 

对于这一行代码:

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
and this error: Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
    is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
    Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:12:5-42:19 to override.
in the event.

代码如下:

package com.example.android.myfirstmap;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

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

        // Add a marker in Sydney, Australia, and move the camera.
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }

我环顾四周,看看是否有一种解决方案也可以解决我的问题,但是我尝试过的解决方案都不是正确的。

有人知道如何解决吗? evreything已更新。

1 个答案:

答案 0 :(得分:0)

Support Map Fragment扩展了androidx.fragment.app.Fragment

您正在导入使用android.support.v4.app.FragmentActivity的{​​{1}}。这是两个不同的类,因此它们是不兼容的。

您需要将应用迁移到Android X:https://developer.android.com/jetpack/androidx/migrate

然后,在您的android.support.v4.app.Fragment文件中,将build.gradle替换为com.android.support:support-fragment

希望有帮助!