• 7
name

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191

Backtrace:

File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

name Punditsdkoslkdosdkoskdo

Google Maps V2 - Error inflating class Fragment

I'm trying my hand and Android Application Development. I'm currently using Eclipse (I can't remember the version, whatever the newest is). I've crossed a bridge where I just can't seem to grasp what I'm doing wrong. I'm attempting to use the Google Maps V2 API. I've been through several documents and tried several techniques, all of which lead to the same error:

Android.view.Inflate Exception: Binary XML file line #2: Error inflating class fragment

I've been pounding my face into the keys for 2 days straight trying to grasp what I'm doing wrong here.

Things I've done:

  1. Started with a blank activity.
  2. Project -> Properties -> Android -> Project Build Target is Google APIs - 4.2 - API 17 - I've tried every other option as well (as long as above version 3.0, found it documented
  3. Added the google-play-services_lib to my Package Explorer. I indicated that the google-play-services_lib was indeed a library.
  4. Project -> Properties -> Android -> Library -> Add -> and I choose the location to the google-play-services_lib.
  5. Included android-support-v4.jar as a dependency of my project.

I've tried so many different answers from questions similar to mine, but to no avail. :( I can usually figure these things out, but maybe I'm just too overloaded.

My package explorer tree in eclipse looks like

  1. google-play-services_lib
  2. Svma

Here's the code:>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"/>

Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.testing.svma"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <permission
        android:name="com.testing.svma.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.testing.svma.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.testing.svma.MainActivity"
            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.maps.v2.API_KEY"
            android:value="SHA1_Generated_KEY_HERE" />
    </application>

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

MainActivity.java

package com.testing.svma;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }
}

Reference Documents

  1. I used “Error inflating class fragment” with google map to try and fix my issues.

  2. I referenced This google maps quick start guide to create my project.

  3. I had started initially with the sample code from the Introduction to the Google Maps Android V2 Api

  4. A whole slew of SO questions.

So, SO Community, what am I doing wrong? Why am I unable to grasp this simple concept.

Thank you in advance.

    • I'm doing the same thing. My code works and it seems to be identical to yours. Maybe post the rest of the stack trace? Is there a second "Caused by:" ?

I know this is probably a dead thread but just in case someone stumbles upon here having an identical problem - your manifest might be missing the following meta information:

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />

Declare it within the <application> element and your code should work. I ran into the same issue following a youtube tutorial that skipped this step and only when carefully going through the original Google tutorial I noticed the missing code.

Anyway, hope this helps someone.

  • 32
Reply Report

I have the same code/same problem! Try adding android:name="com.testing.svma.MainActivity" to "fragment" in the layout! It solved the issue for me

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment"
    android:name="com.testing.svma.MainActivity"/>
  • 23
Reply Report
    • I was having a similar issue, but I was using a MapFragment. I copy and pasted your XML and changed the "android:name" line to match my project. It worked! I also had to make a small code change. Had to include this ((SupportMapFragment)(this.getSupportFragmentManager().findFragmentById(R.id.map))).getMap(); over my previous code. I have no idea why this worked, my code was working 2 days ago... I didn't even push a new update, I simply opened the application again and was getting all these errors discussed above.
      • 1
    • I suppose it depends on the API level. I am stuck with implementing for API 8 and this didn't change anything for me. I'm still looking for a solution.

I had the same problem, solved it by modifying the Manifest. This is my manifest.

 <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="example.gps"
            android:versionCode="1"
            android:versionName="1.0" >

        <permission 
               android:name="example.gps.permission.MAPS_RECEIVE" 
               android:protectionLevel="signature"></permission>
      <!-- Copied from Google Maps Library/AndroidManifest.xml. -->
         <uses-sdk
           android:minSdkVersion="9"
           android:targetSdkVersion="17"/>
         <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
         <uses-permission android:name="android.permission.INTERNET"/>
         <uses-permission      android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
      <!-- External storage for caching. -->
         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
      <!-- My Location -->
         <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
         <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
      <!-- Maps API needs OpenGL ES 2.0. -->
         <uses-feature
            android:glEsVersion="0x00020000"
            android:required="true"/>
      <!-- End of copy. -->

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme"
            android:hardwareAccelerated="true" >
            <meta-data
                android:name="com.google.android.maps.v2.API_KEY"
                android:value="<YOUR VALUE>"/>
            <meta-data
                android:name="com.google.android.gms.version"
                android:value="@integer/google_play_services_version" />
            <activity
                android:name="example.gps.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                     <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

    </manifest>

And the xml file is

 <?xml version="1.0" encoding="utf-8"?>
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.SupportMapFragment"
    />

The java class is

   public class MainActivity extends FragmentActivity
        {
           @Override
           protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_main);
           }
        }

That solved my problem

  • 6
Reply Report
    • You should add some description to what changes you've made to make it work. While posted code may help someone, you should specify what the code does.

Try to add google-play-services library reference to your project. If you are using Eclipse, you need to go to Project->Properties->Android and Add google-play-services library project.

ALTERNATIVELY,

You can modify project.properties file manually. Try to add reference to your google_play_services library. So my project.properties file looks like:

# Project target.
target=android-17
android.library.reference.1=../../../android-sdks/extras/google/google_play_services/libproject/google-play-services_lib

In your case path to google-play-services lib may be different

I tried to import your code and it crashed as well. When I modified properties file - I've got map running

  • 3
Reply Report

I spend a lot of time trying to solve this problem and after much reading and trying, I solved by changing the

public class MainActivity extends FragmentActivity

for this

public class MainActivity extends android.support.v4.app.FragmentActivity

I hope this can help you

  • 2
Reply Report

Had tried all the above answers over a period of a couple of days and then eventually this worked:

Project -> Properties -> Android -> Project Build Target

Changed the project build target to android 4.3(API 18) and clicked apply

In the manifest I then manually changed the min and target sdk versions:

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

This now matches the target=android-18 in the project.properties file (which resulted from the project build target change we did first)

I also tried android:minSdkVersion="11" which worked so the targetSdkVersionis the important bit.

Hope this helps someone!

  • 2
Reply Report

Frequently the problem is in Manifest.xml , so be sure that you write the right permissions like : `

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.zako.android.locationapi.maps"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <permission
        android:name="com.zako.android.locationapi.maps.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <!-- Required OpenGL ES 2.0. for Maps V2 -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <!-- Requires OpenGL ES version 2 -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="com.zako.android.locationapi.maps.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="com.zako.android.locationapi.maps.MainActivity"
            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.maps.v2.API_KEY"
            android:value="......" />
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    </application>

</manifest>

`

don't forget <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> and <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

  • 2
Reply Report

I had a similar error and I think it comes from this point: when I include the Google Play Service API I do not copy it in my workspace, I use the original one !!!

Note: You should be referencing a copy of the library that you copied to your source tree—you should not reference the library from the Android SDK directory.

Check this point.

  • 1
Reply Report

Just include the following line of code on onDestroy()

SupportMapFragment mapFragment = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map_location_sharing));

if(mapFragment != null) {
    FragmentManager fM = getFragmentManager();
    fM.beginTransaction().remove(mapFragment).commit();

It worked for me.Hopefully gonna work for you too. Thanks

  • 1
Reply Report

I had the same problem and I did the mistake to only add one of the 2 following tags.

The actual error is really misleading, as you might be thinking of some API level UI issue.

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="<YOUR VALUE>"/>
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

Note that you are also missing one of these two

  • 1
Reply Report

In Some of android 6.0 mobile this exception is bug If unable to flat XML cause by

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Configuration android.content.res.Resources.getConfiguration()' on a null object reference

Then it is active bug in android https://issuetracker.google.com/issues/35827842

This can be solved by adding

android:hardwareAccelerated="true" adding in activity tag
  • 1
Reply Report

using both meta data references was resolving the issue in my case:

<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="yourAPIkeyFromGoogleAPIConsole" />
  • 0
Reply Report