Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android谷歌地图问题_Java_Android_Google Maps - Fatal编程技术网

Java android谷歌地图问题

Java android谷歌地图问题,java,android,google-maps,Java,Android,Google Maps,我目前正在构建一个android应用程序。我了解基础知识,我做了很多应用程序,但现在我的项目更大了。我的应用程序包括许多包含NavigationDrawer的屏幕,这迫使我在我希望在应用程序上显示的每个类上使用Fragment类的扩展。 这是我的问题——不久前,我创建了一个应用程序,一个简单的一页谷歌地图屏幕,它工作得很好。我想在我目前正在使用的应用程序上做同样的事情,但当我进入页面时,它给我的只是左下角屏幕上的谷歌日志,其余部分是灰色的,就像没有显示地图一样。我在很多地方搜索解决方案,包括这个

我目前正在构建一个android应用程序。我了解基础知识,我做了很多应用程序,但现在我的项目更大了。我的应用程序包括许多包含NavigationDrawer的屏幕,这迫使我在我希望在应用程序上显示的每个类上使用Fragment类的扩展。 这是我的问题——不久前,我创建了一个应用程序,一个简单的一页谷歌地图屏幕,它工作得很好。我想在我目前正在使用的应用程序上做同样的事情,但当我进入页面时,它给我的只是左下角屏幕上的谷歌日志,其余部分是灰色的,就像没有显示地图一样。我在很多地方搜索解决方案,包括这个网站,我得到的答案是,这可能与我的API密钥有关谷歌给我的。我检查了一下,我很确定它不是来自密钥,因为我在我的一页谷歌地图应用程序上应用了它,它工作得很好。我还拥有所有需要的权限。我检查了6次。所以我的结论是代码中有某种东西阻止了地图的显示

这是我的密码:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.maps.GoogleMap;
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 guide extends Fragment {



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // inflat and return the layout
        View v = inflater.inflate(R.layout.test, container,
                false);

        return v;
    }

    class HoldFragmentPlace extends FragmentActivity{

        private GoogleMap mMap;

        public HoldFragmentPlace(){

        }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // inflat and return the layout
        View v = inflater.inflate(R.layout.test, container,
                false);

        return v;
    }

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

    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            // Check if we were successful in obtaining the map.
            if (mMap != null) {
                setUpMap();
            }
        }
    }

        private void setUpMap() {
            mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
        }


    }

}
我的NavigationDrawer需要这个片段扩展才能工作,所以我创建了一个内部类,并在那里为映射应用了代码

以下是我在舱单上的信息:

     <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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="android.permission.ACCESS_FINE_LOCATION" />
这是我的地图xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.gms.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        class="com.google.android.gms.maps.SupportMapFragment"
        android:layout_marginTop="-470dp" />

</LinearLayout>

我还尝试了java代码的一些其他变体,其中一些没有包含内部类,结果仍然是一样的。我要么错过了一些非常基本的东西,要么我误解了关于Android的一些概念。如果您已经阅读了所有这些,感谢您抽出时间

我怀疑某些零件丢失了:

1声明使用地图的权限\u接收:

2缺少Declare gms版本变量:

  <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
3 API_密钥的生成可能存在一些问题:

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="your_key" />
请首先检查上述3个可疑点:然后,如果仍然存在错误,您可以重新确认启用Google地图的步骤


仔细检查与API_密钥相关的内容

检查APK签名。您必须在测试中分配调试API密钥,在释放APK时分配释放API密钥。插入正确的API密钥,清理并重建项目

我在那里已经一年了,我可以保证这就是问题所在。仔细检查您的密钥,看看它是调试密钥还是释放密钥

另一件要检查的事情是你的应用程序包名。。。 让我知道如果你这样做了,仍然得到灰色视图而不是

更新:

当我意识到你的问题只是在签约阶段时,我正试图把一切都包括进去

您只需要获取调试密钥库的SHA-1指纹并将其放入API密钥对话框中。相信我,没有什么比谷歌文档更清晰、更丰富的了

按照本文中的步骤获取调试证书和SHA-1指纹

更新2:


为了获得密钥库的SHA-1,您可以选中此项。

您可以使用SupportMapFragment在片段中显示映射

xml应更改为

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="match_parent"
android:layout_height="match_parent">


<fragment
 android:id="@+id/mapView"
android:layout_marginTop="-470dp"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</LinearLayout>

注意:如果找不到SupportMapFragment的getMapAsync方法,请更新您的google play服务。

04-15 12:42:28.960 1961-2088/******************E/google Maps Android API﹕ 授权失败。请参阅以了解如何正确设置地图。04-15 12:42:28.960 1961-2088/****************E/谷歌地图Android API﹕ 在Google开发者控制台中,确保启用了Google Maps Android API v2。确保以下Android密钥存在:API密钥:******************Android应用程序;:********************************还有E/Google地图Android API﹕ 未能加载映射。联系谷歌服务器时出错。这可能是一个身份验证问题,但可能是由于网络错误。我的包名与我在构建应用程序时已生成的API密钥相同。我创建了一个映射活动,该活动生成了xml文件,其中包含一些SHA1代码。我用它来生成密钥,我假设这是一个调试密钥,除此之外,我不知道如何检查它是否真的是一个。另外,当我在signingConfigs{}上转到gradle.app时,该方法是空的。我在我的.android文件夹中发现了一个debug.keystore文件。你知道我如何通过任何机会访问它以查看密钥吗?谢谢!同时,我从文件->项目结构创建了一个新的调试密钥库,现在我的gradle具有以下签名配置{map{keyalis'map'keyPassword'********'storeFile文件'C:/Android Key Store/Key_Store.jks'storePassword'***}我还在BuildTypes中将其设置为每次自动启动。但现在,当我运行它时,在运行时出现此错误错误:任务执行失败“:app:packageDebug”。>无法从密钥库读取密钥
 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="match_parent"
android:layout_height="match_parent">


<fragment
 android:id="@+id/mapView"
android:layout_marginTop="-470dp"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</LinearLayout>
public class guide extends Fragment {

private GoogleMap mMap;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // inflat and return the layout
    View v = inflater.inflate(R.layout.test, container, false);

    ((SupportMapFragment) getFragmentManager()
            .findFragmentById(R.id.mapView)).getMapAsync (new OnMapReadyCallback(){
                @Override
                public void onMapReady(final GoogleMap map) {
                    this.mMap = map;
                    mMap.setMyLocationEnabled(true);
                    setUpMap();
                }
            });


    return v;
}

private void setUpMap() {
        mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
    }

}