java - GoogleMap V2 错误 android.view.InflateException : Binary XML file line #7: Error inflating class fragment

标签 java android google-maps-android-api-2 android-fragmentactivity

谁能解释一下为什么会出现这个错误?我能做些什么来解决这个问题? 这是我第一次遇到这样的问题。谢谢您的帮助。

堆栈跟踪:

11-27 16:35:07.250: D/AndroidRuntime(18552): Shutting down VM
11-27 16:35:07.250: W/dalvikvm(18552): threadid=1: thread exiting with uncaught exception (group=0x4144b930)
11-27 16:35:07.255: E/AndroidRuntime(18552): FATAL EXCEPTION: main
11-27 16:35:07.255: E/AndroidRuntime(18552): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.agusharyanto.petalokasi/net.agusharyanto.petalokasi.DisplayCurrentLocActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2249)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2299)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.app.ActivityThread.access$700(ActivityThread.java:154)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.os.Looper.loop(Looper.java:137)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.app.ActivityThread.main(ActivityThread.java:5306)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at java.lang.reflect.Method.invokeNative(Native Method)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at java.lang.reflect.Method.invoke(Method.java:511)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at dalvik.system.NativeStart.main(Native Method)
11-27 16:35:07.255: E/AndroidRuntime(18552): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:342)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.app.Activity.setContentView(Activity.java:1928)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at net.agusharyanto.petalokasi.DisplayCurrentLocActivity.onCreate(DisplayCurrentLocActivity.java:41)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.app.Activity.performCreate(Activity.java:5255)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2213)
11-27 16:35:07.255: E/AndroidRuntime(18552):    ... 11 more
11-27 16:35:07.255: E/AndroidRuntime(18552): Caused by: java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior:
11-27 16:35:07.255: E/AndroidRuntime(18552): <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
11-27 16:35:07.255: E/AndroidRuntime(18552):    at maps.af.cf.a(Unknown Source)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at maps.af.ay.a(Unknown Source)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at maps.af.al.a(Unknown Source)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at maps.af.be.a(Unknown Source)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at maps.af.bd.a(Unknown Source)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at cmj.onTransact(SourceFile:107)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.os.Binder.transact(Binder.java:310)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onCreateView(Unknown Source)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at com.google.android.gms.maps.SupportMapFragment$a.onCreateView(Unknown Source)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at com.google.android.gms.dynamic.a$4.b(Unknown Source)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at com.google.android.gms.dynamic.a.a(Unknown Source)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at com.google.android.gms.dynamic.a.onCreateView(Unknown Source)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:900)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1184)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:291)
11-27 16:35:07.255: E/AndroidRuntime(18552):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:682)
11-27 16:35:07.255: E/AndroidRuntime(18552):    ... 21 more

list

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

package="net.agusharyanto.petalokasi"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="17" />

<permission
    android:name="net.agusharyanto.petalokasi.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

<uses-permission android:name="net.agusharyanto.petalokasi.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="android.permission.ACCESS_FINE_LOCATION" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="net.agusharyanto.petalokasi.DisplayCurrentLocActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <meta-data android:name="com.google.android.gms.version" 
                 android:value="@integer/google_play_services_version" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AIzaSyAkJYisD9-6HB8D1ggkkWKZVtgNCLg8Fyk" />
</application>

</manifest>

DisplayCurrentLocActivity.java

 public class DisplayCurrentLocActivity extends FragmentActivity {
GoogleMap googlemap;
MarkerOptions markerOptions;
LatLng latLng;
LatLng prevLatLng = null;
Marker marker = null;
ArrayList<LatLng> arrline = new ArrayList<LatLng>();
private LocationManager locManager;
private LocationListener locListener;

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

    FragmentManager fragmentManager = getSupportFragmentManager();
    SupportMapFragment supportMapFragment = (SupportMapFragment) fragmentManager
            .findFragmentById(R.id.mapcurrloc);

    // Getting a reference to the map
    googlemap = supportMapFragment.getMap();
    initLocationManager();
}

/**
 * Initialize the location manager.
 */
private void initLocationManager() {
    locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    locListener = new LocationListener() {
        // method ini akan dijalankan apabila koordinat GPS berubah
        public void onLocationChanged(Location newLocation) {

            displayCurrentLoctoMap(newLocation);
        }

        public void onProviderDisabled(String arg0) {

        }

        public void onProviderEnabled(String arg0) {
            Location location = locManager
                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
            displayCurrentLoctoMap(location);
        }

        public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
        }
    };
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
            locListener);
    Location location = locManager
            .getLastKnownLocation(LocationManager.GPS_PROVIDER);
    displayCurrentLoctoMap(location);
}

/**
 * This method will be called when current position changed is submitted via
 * the GPS.
 *
 * @param newLocation
 */
protected void displayCurrentLoctoMap(Location newLocation) {
    try {
        LatLng currlok = new LatLng(newLocation.getLatitude(),
                newLocation.getLongitude());

        if (marker != null)
            marker.remove();
        markerOptions = new MarkerOptions().position(currlok)
                .title("Current Location")
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher));

        googlemap.moveCamera(CameraUpdateFactory.newLatLngZoom(currlok, 15));
         // call and execute ReversGeocoding Task
          new ReverseGeocodingTask(getBaseContext()).execute(currlok);

    } catch (NullPointerException e) {
        Toast.makeText(DisplayCurrentLocActivity.this,"Can't get gps location, make sure your gps is enable",Toast.LENGTH_LONG).show();
    }
}

private class ReverseGeocodingTask extends AsyncTask<LatLng, Void, String>{
    Context mContext;

    public ReverseGeocodingTask(Context context){
        super();
        mContext = context;
    }

    // Finding address using reverse geocoding
    @Override
    protected String doInBackground(LatLng... params) {
        Geocoder geocoder = new Geocoder(mContext);
        double latitude = params[0].latitude;
        double longitude = params[0].longitude;

        List<Address> addresses = null;
        String addressText="";

        try {
            addresses = geocoder.getFromLocation(latitude, longitude,1);
        } catch (IOException e) {
            e.printStackTrace();
        }

        if(addresses != null && addresses.size() > 0 ){
            Address address = addresses.get(0);

            addressText = String.format("%s, %s, %s",
            address.getMaxAddressLineIndex() > 0 ? address.getAddressLine(0) : "",
            address.getLocality(),
            address.getCountryName());
        }

        return addressText;
    }

    @Override
    protected void onPostExecute(String addressText) {
        // Setting the snippet for the marker.
        // This will be displayed on taping the marker
        Log.d("TAG","Alamat:"+addressText);
        markerOptions.snippet(addressText);
        marker = googlemap.addMarker(markerOptions);

    }
}

}

最佳答案

Caused by: java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior:

添加这是 list

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

关于java - GoogleMap V2 错误 android.view.InflateException : Binary XML file line #7: Error inflating class fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20239945/

相关文章:

java - 无法检查来自 SQLite 的有效登录

带有 Firebase 的 Android Studio 2.1.2 不工作

android - 如何以有效的方式从点集合创建三角形?

java - 启动 jboss 服务器时出错

java - eclipse - 包 org.testng 不存在

java - keytool 在单个文件中导入多个证书

Android - ViewSwitcher 不切换 View

java - Android:按钮淡出问题

java - 如何在谷歌地图android上显示多个标记

Android:电池使用率低的谷歌地图位置