Android谷歌地图v2错误,同时膨胀片段

时间:2014-04-22 07:12:12

标签: android api google-maps android-fragments

我对谷歌地图实施一天半完全感到困惑。我遵循了链接中提到的所有必要步骤。    https://developers.google.com/maps/documentation/android/start#getting_the_google_maps_android_api_v2

但是我一直得到以下提到的错误。我需要你的鹰眼经验。

ERROR:

04-22 12:02:14.599: E/AndroidRuntime(6702): FATAL EXCEPTION: main
04-22 12:02:14.599: E/AndroidRuntime(6702): java.lang.RuntimeException: Unable to start activity     
ComponentInfo{com.example.srihari/com.example.srihari.MapLocation}: 
android.view.InflateException: Binary XML file line #7: Error inflating class fragment
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.app.ActivityThread.access$700(ActivityThread.java:140)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.os.Handler.dispatchMessage(Handler.java:99)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at android.os.Looper.loop(Looper.java:137)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.app.ActivityThread.main(ActivityThread.java:4921)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
java.lang.reflect.Method.invokeNative(Native Method)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
java.lang.reflect.Method.invoke(Method.java:511)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at dalvik.system.NativeStart.main(Native 
Method)
04-22 12:02:14.599: E/AndroidRuntime(6702): Caused by: android.view.InflateException: Binary XML 
file line #7: Error inflating class fragment
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.view.LayoutInflater.inflate(LayoutInflater.java:489)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.view.LayoutInflater.inflate(LayoutInflater.java:396)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.view.LayoutInflater.inflate(LayoutInflater.java:352)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:316)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.app.Activity.setContentView(Activity.java:1924)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.example.srihari.MapLocation.onCreate(MapLocation.java:36)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.app.Activity.performCreate(Activity.java:5188)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
04-22 12:02:14.599: E/AndroidRuntime(6702):     ... 11 more
04-22 12:02:14.599: E/AndroidRuntime(6702): Caused by: java.lang.IllegalStateException: The meta-
data tag in your app's AndroidManifest.xml does not have the right value.  Expected 4323000 but 
found 0.  You must have the following declaration within the <application> element:     <meta-
data android:name="com.google.android.gms.version" 
android:value="@integer/google_play_services_version" />
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.google.android.gms.common.GooglePlayServicesUtil.t(Unknown Source)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(Unknown 
Source)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.google.android.gms.maps.internal.q.B(Unknown Source)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.google.android.gms.maps.internal.q.A(Unknown Source)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.google.android.gms.maps.MapsInitializer.initialize(Unknown Source)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.google.android.gms.maps.SupportMapFragment$b.gW(Unknown Source)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.google.android.gms.maps.SupportMapFragment$b.a(Unknown Source)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at com.google.android.gms.dynamic.a.a(Unknown 
Source)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.google.android.gms.dynamic.a.onInflate(Unknown Source)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
com.google.android.gms.maps.SupportMapFragment.onInflate(Unknown Source)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:290)
04-22 12:02:14.599: E/AndroidRuntime(6702):     at 
android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
04-22 12:02:14.599: E/AndroidRuntime(6702):     ... 21 more

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<fragment 
    android:id="@+id/map2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment" />

    </RelativeLayout>

CODE:

package com.example.srihari;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;


import android.app.Dialog;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.widget.Toast;





public class MapLocation extends FragmentActivity {


GoogleMap googleMap;    
SharedPreferences sharedPreferences;    
int locationCount = 0;


@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_locations);

    // Getting Google Play availability status
    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

    // Showing status
    if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

        int requestCode = 10;
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
        dialog.show();

    }else { // Google Play Services are available           

        // Getting reference to the SupportMapFragment of activity_main.xml
        SupportMapFragment fm = (SupportMapFragment) 
getSupportFragmentManager().findFragmentById(R.id.map2);

        // Getting GoogleMap object from the fragment
        googleMap = fm.getMap();

        // Enabling MyLocation Layer of Google Map
        googleMap.setMyLocationEnabled(true);           

        // Opening the sharedPreferences object
        sharedPreferences = getSharedPreferences("location", 0);

        // Getting number of locations already stored
        locationCount = sharedPreferences.getInt("locationCount", 0);


        // Getting stored zoom level if exists else return 0
        String zoom = sharedPreferences.getString("zoom", "0");

        // If locations are already saved
        if(locationCount!=0){           

            String lat = "";
            String lng = "";

            // Iterating through all the locations stored
            for(int i=0;i<locationCount;i++){

                // Getting the latitude of the i-th location
                lat = sharedPreferences.getString("lat"+i,"0");

                // Getting the longitude of the i-th location
                lng = sharedPreferences.getString("lng"+i,"0");

                // Drawing marker on the map
                drawMarker(new LatLng(Double.parseDouble(lat), 
Double.parseDouble(lng)));                  
            }

            // Moving CameraPosition to last clicked position
            googleMap.moveCamera(CameraUpdateFactory.newLatLng(new 
LatLng(Double.parseDouble(lat), Double.parseDouble(lng))));

            // Setting the zoom level in the map on last position  is clicked
            googleMap.animateCamera(CameraUpdateFactory.zoomTo(Float.parseFloat(zoom)));                            
        }

    }        

    googleMap.setOnMapClickListener(new OnMapClickListener() {

        @Override
        public void onMapClick(LatLng point) {      
            locationCount++;

            // Drawing marker on the map
            drawMarker(point);

            /** Opening the editor object to write data to sharedPreferences */
            SharedPreferences.Editor editor = sharedPreferences.edit();         

            // Storing the latitude for the i-th location
            editor.putString("lat"+ Integer.toString((locationCount-1)), 
Double.toString(point.latitude));

            // Storing the longitude for the i-th location
            editor.putString("lng"+ Integer.toString((locationCount-1)), 
Double.toString(point.longitude));

            // Storing the count of locations or marker count
            editor.putInt("locationCount", locationCount);              

            /** Storing the zoom level to the shared preferences */
            editor.putString("zoom", Float.toString(googleMap.getCameraPosition().zoom));               

            /** Saving the values stored in the shared preferences */
            editor.commit();            

            Toast.makeText(getBaseContext(), "Marker is added to the Map", 
Toast.LENGTH_SHORT).show();                 

        }
    }); 


    googleMap.setOnMapLongClickListener(new OnMapLongClickListener() {              
        @Override
        public void onMapLongClick(LatLng point) {

            // Removing the marker and circle from the Google Map
            googleMap.clear();

            // Opening the editor object to delete data from sharedPreferences
            SharedPreferences.Editor editor = sharedPreferences.edit();

            // Clearing the editor
            editor.clear();

            // Committing the changes
            editor.commit();

            // Setting locationCount to zero
            locationCount=0;

        }
    });           


}

private void drawMarker(LatLng point){
    // Creating an instance of MarkerOptions
    MarkerOptions markerOptions = new MarkerOptions();                  

    // Setting latitude and longitude for the marker
    markerOptions.position(point);

    // Adding marker on the Google Map
    googleMap.addMarker(markerOptions);         
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}


}

清单文件:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.srihari"
android:versionCode="1"
android:versionName="1.0" >

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

 <permission
      android:name="com.example.srihari.permission.MAPS_RECEIVE"
      android:protectionLevel="signature"/>


<uses-permission android:name="com.example.srihari.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"/>

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >



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


    <activity
        android:name="com.example.srihari.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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


       <activity
        android:name="com.example.srihari.LogIn"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

        <activity
        android:name="com.example.srihari.ImportFile"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

        <activity
        android:name="com.example.srihari.SelectCustomer"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
      <activity
        android:name="com.example.srihari.ProductList"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

       <activity
        android:name="com.example.srihari.ImportImageDetails"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

        <activity
        android:name="com.example.srihari.CreateConfirmOrderList"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.example.srihari.ShowImage"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.example.srihari.DataXmlExporter"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

    <activity
        android:name="com.example.srihari.OrderUpdate"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

    <activity
        android:name="com.example.srihari.StatusImport"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

     <activity
        android:name="com.example.srihari.OrderHistory"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

        <activity
        android:name="com.example.srihari.SingleOrderDetails"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

         <activity
          android:name="com.example.srihari.CustomerDetailsSingle"
          android:label="@string/app_name" >
            <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
       </activity>

          <activity
        android:name="com.example.srihari.MainActivityIndivisual"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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


            <activity
        android:name="com.example.srihari.MapLocation"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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


            <activity
        android:name="com.example.srihari.ThankYouPage"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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



</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SEND_SMS" />
 <uses-permission android:name="android.permission.RECEIVE_SMS" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>


</manifest>

2 个答案:

答案 0 :(得分:6)

你的logcat清楚地说了

  

引起:java.lang.IllegalStateException:中的元数据标记   您应用的AndroidManifest.xml没有正确的值。   预期4323000但找到0.您必须具备以下条件   元素内的声明:

尝试使用<meta-data>文件中<application>标记下的manifest.xml标记添加Google Play服务版本,例如

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

让你的manifest.xml赞成

....<application>
..............
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="Key" />

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

</application>

答案 1 :(得分:1)

添加

<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="**Replace with your key**" />
清单中的

这是用于显示地图的正确 Android_manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="19" />

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <uses-library android:name="com.google.android.maps" />
    <activity
        android:name="com.example.package.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.gms.version"
        android:value="@integer/google_play_services_version" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="**Replace with your key**" />
</application>

别忘了添加google-play-services_lib