Verzweiflung! Google API v2 will einfach nicht.

  • 21 Antworten
  • Letztes Antwortdatum
P

Pogonuss

Neues Mitglied
0
Guten Tag,
ich versuche seit mehreren Tagen schlicht eine Map in meine App einzubauen.
Viel erfahrung mit Android habe ich sicher nicht, aber nach mehreren Büchern und Tutorien funktioniert es einigermaßen. NUR DIE VERDAMMTE KARTE WILL NICHT! :D Nachdem ich herausgefunden habe, dass die Google API v1 nicht mehr gehen, habe ich es mit v2 versucht, jedoch stürzt die App jedes mal ab!
Mein letzter versuch war nach folgendem Tutorial:
Android Google Maps V2 Tutorial
Dennoch stürzt sie mir sofort ab und ich weiß nicht warum. Ich benutze das SDK von google und ein AVD mit dem neusten Android.
Danke im voraus.
 
Hi,

bei solchen Fragen solltest du immer die Fehlermeldung mit hier in deine Frage schreiben.
Die Wenigsten hier haben eine Glaskugel.
 
oh sorry, war gestern leicht gestresst :D

Code:
05-06 02:28:56.243: W/dalvikvm(1057): threadid=1: thread exiting with uncaught exception (group=0xb1ad6ba8)
05-06 02:28:56.253: E/AndroidRuntime(1057): FATAL EXCEPTION: main
05-06 02:28:56.253: E/AndroidRuntime(1057): Process: com.pms.maps, PID: 1057
05-06 02:28:56.253: E/AndroidRuntime(1057): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pms.maps/com.pms.maps.MainActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.app.ActivityThread.access$800(ActivityThread.java:135)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.os.Handler.dispatchMessage(Handler.java:102)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.os.Looper.loop(Looper.java:136)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.app.ActivityThread.main(ActivityThread.java:5017)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at java.lang.reflect.Method.invokeNative(Native Method)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at java.lang.reflect.Method.invoke(Method.java:515)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at dalvik.system.NativeStart.main(Native Method)
05-06 02:28:56.253: E/AndroidRuntime(1057): Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.app.Activity.setContentView(Activity.java:1929)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.pms.maps.MainActivity.onCreate(MainActivity.java:20)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.app.Activity.performCreate(Activity.java:5231)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	... 11 more
05-06 02:28:56.253: E/AndroidRuntime(1057): 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" />
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.google.android.gms.common.GooglePlayServicesUtil.t(Unknown Source)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(Unknown Source)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.google.android.gms.maps.internal.q.B(Unknown Source)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.google.android.gms.maps.internal.q.A(Unknown Source)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.google.android.gms.maps.MapsInitializer.initialize(Unknown Source)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.google.android.gms.maps.MapFragment$b.gW(Unknown Source)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.google.android.gms.maps.MapFragment$b.a(Unknown Source)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.google.android.gms.dynamic.a.a(Unknown Source)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.google.android.gms.dynamic.a.onInflate(Unknown Source)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.app.Activity.onCreateView(Activity.java:4785)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
05-06 02:28:56.253: E/AndroidRuntime(1057): 	... 21 more

hier die main activity:
Code:
package com.pms.maps;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;




public class MainActivity extends Activity {
 
    // Google Map
    private GoogleMap googleMap;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        try {
            // Loading map
            initilizeMap();
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
    /**
     * function to load map. If map is not created it will create it for you
     * */
    private void initilizeMap() {
        if (googleMap == null) {
            googleMap = ((MapFragment) getFragmentManager().findFragmentById(
                    R.id.map)).getMap();
 
            // check if map is created successfully or not
            if (googleMap == null) {
                Toast.makeText(getApplicationContext(),
                        "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        initilizeMap();
    }
 
}
Die activity_main.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
 
    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
 
</RelativeLayout>
und das Manifest:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.pms.maps"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <permission
        android:name="com.pms.maps.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />
 
    <uses-permission android:name="com.pms.maps.permission.MAPS_RECEIVE" />
 
    <uses-sdk
        android:minSdkVersion="12"
        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" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
    <!-- Required to show current location -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 
    <!-- Required OpenGL ES 2.0. for Maps V2 -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name="com.pms.maps.MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppBaseTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <!-- Goolge API Key -->
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyCy3knRP5DzXBMjSCXmjYsSGR*******" />
    </application>
 
</manifest>
Danke :D
 
Lol, besser kann es LogCat dir gar nicht erklären:
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" />
 
Doch, ich verstehe es nicht :D könntest du mir erklären was ich tun muss?
 
Du fügst einfach das in dein manifest ein:

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

lg.
 
Einerseits Danke :D er hat wenigstens bei einem emulator nach den Google play services gefragt und ist nicht sofort abgestürzt. Bei dem Emulator mit google api jedoch schon.

Wieso muss unter android:value den nicht der API key rein wie im tutorial?
Folgenden Fehler bekomme ich nämlich jetzt:
Code:
05-06 02:49:04.290: E/AndroidRuntime(1236): Caused by: java.lang.RuntimeException: API key not found.  Check that <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your API key"/> is in the <application> element of AndroidManifest.xml
Also doch der Key? Muss als android:name mein Package oder com.google.android.maps.v2.API_KEY stehen?

Der komplette Fehlercode:
Code:
05-06 02:49:04.270: W/dalvikvm(1236): threadid=1: thread exiting with uncaught exception (group=0xb1aaeba8)
05-06 02:49:04.290: E/AndroidRuntime(1236): FATAL EXCEPTION: main
05-06 02:49:04.290: E/AndroidRuntime(1236): Process: com.pms.maps, PID: 1236
05-06 02:49:04.290: E/AndroidRuntime(1236): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pms.maps/com.pms.maps.MainActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.ActivityThread.access$800(ActivityThread.java:135)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.os.Handler.dispatchMessage(Handler.java:102)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.os.Looper.loop(Looper.java:136)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.ActivityThread.main(ActivityThread.java:5017)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at java.lang.reflect.Method.invokeNative(Native Method)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at java.lang.reflect.Method.invoke(Method.java:515)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at dalvik.system.NativeStart.main(Native Method)
05-06 02:49:04.290: E/AndroidRuntime(1236): Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.Activity.setContentView(Activity.java:1929)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at com.pms.maps.MainActivity.onCreate(MainActivity.java:20)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.Activity.performCreate(Activity.java:5231)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	... 11 more
05-06 02:49:04.290: E/AndroidRuntime(1236): Caused by: java.lang.RuntimeException: API key not found.  Check that <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your API key"/> is in the <application> element of AndroidManifest.xml
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at maps.e.ay.a(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at maps.e.ay.a(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at maps.e.ay.a(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at maps.e.ay.a(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at maps.e.al.a(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at maps.e.bh.a(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at maps.e.bg.a(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at etu.onTransact(SourceFile:107)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.os.Binder.transact(Binder.java:361)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onCreateView(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at com.google.android.gms.maps.MapFragment$a.onCreateView(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at com.google.android.gms.dynamic.a$4.b(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at com.google.android.gms.dynamic.a.a(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at com.google.android.gms.dynamic.a.onCreateView(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at com.google.android.gms.maps.MapFragment.onCreateView(Unknown Source)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.Fragment.performCreateView(Fragment.java:1700)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:866)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1040)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1142)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.app.Activity.onCreateView(Activity.java:4786)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
05-06 02:49:04.290: E/AndroidRuntime(1236): 	... 21 more
 
Hi,

ja in key muss der Map-Key rein.
In dem LogCat-Vorschlag ist lediglich eine "Verlinkung" zu einer date namens "Integer" wo die Zahl drinne steht.

Code:
<meta-data android:name="com.google.android.gms.version" android:value="4323000" />

Gruß
 
Dann lande ich aber wieder bei der Fehlermeldung wie ganz am anfang ;D
 
Kann nicht sein
 
GENAU DAS DENKE ICH MIR JA AUCH! :D SEIT TAGEN! Ist aber so. :D

Wobei, ich habe es nochmals gestartet. Diesmal kam wirklich was anderes.

Wenn ich jetzt den kompletten Fehlercode durchlese, denke ich dass das Problem hier liegt:
Er will als API Key einen integer aber ich habe ja einen String eingegeben. es ist aber doch ein String?
 
Oh gott :D nicht noch komplizierter um so eine blöde map anzuzeigen! :D
der im tutorial musste das doch auch nicht oder?^^ Kennst du vllt einen weg ganz einfach eine Map zum laufen zu bekommen? xD
 
Das ist nicht schwer.

Leg einfach unter res/values/ die datei: integers.xml an
Dort schreibst du
Code:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer
        name="integer_name"
        >ZAHL_PLAY_SERVICE</integer>
</resources>
rein.

Ende :D
 
Das wird doch nicht funktionieren, da der API Key ja keine Zahl sondern ein String ist :D
"AIzaSyCy3knRP5DzXBMjSCXmjYsSGR*******"
 
Lese mal bitte den Beitrag nochmal in ruhe durch! Hier geht es nicht um dem MAP-Key sondern um die Play Store Version..

Gruß
 
https://developers.google.com/maps/documentation/android/start

Füge das und zwar exakt das ein:
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

Keinen eigenen Integer definieren, keine direkte Versionsnennung, sondern exakt das was im Zitat / auf der Googleseite steht. Die Umwandlung zur "passenden" Zahl wird dann während dem Buildvorgang automatisch gemacht.

Und ich frage mich, warum Leute irgendwo irgendwelche Tutorials machen ... Erste Anlaufstelle sollten immer die offiziellen Dokus/Anleitungen der Entwickler sein. In diesem Fall obig verlinkte Anleitung. Ist dann noch etwas unklar, dann suche ich externe Tutorials, aber erste Anlaufstelle immer die Originalquelle.


Zum nächsten: Im Emulator wird deine App ohne Tricks nicht laufen. Auch nicht im Emulator mit Google-APIS. Im Emulator sind keine PlayServices und dementsprechend auch keine Maps-Library installiert.
 
DAAAAAANKE! Ich habe mir zuerst die Dokumentation angeguckt! :D
Nur nachdem diese gescheitert ist, eben die Tutorials.
Mir hat keiner gesagt dass es am Emulator liegt :S
Bist du dir da sicher? Schließlich kann ich die Bibliotheken über Properties ja hinzufügen.
Was ein Mist wegen einer doofen Karte. :D
 
Laut Releasenotes von 2013 gibt es "Emulator support":
https://developers.google.com/maps/documentation/android/releases
Lustigerweise steht überall im Netz, dass es nicht geht ;)

Und selbst bei Google stehts:
https://developers.google.com/maps/documentation/android/intro
Kapitel: Sample Code, die dritte Auflistung Punkt 3:
Note that you cannot use the emulator for running Google Maps Android API v2.

Running Google Maps v2 on the Android emulator - Stack Overflow
Running google map application on Android Emulator - Stack Overflow
Kurts Welt: Google Maps API v2 im Android Emulator

Über Umwege kriegst du es hin. Ich persönlich hab mir GenyMotion (wegen der Geschwindigkeit!) installiert und durch Drag&Drop die beiden APKs nachinstalliert und dadurch Google Maps auch im Emulator zur Verfügung.
 
Okay :D wenn das geht wäre es natürlich gut^^
Welche apks brauche ich da nochmal? :D
 

Ähnliche Themen

4
Antworten
10
Aufrufe
1.080
jogimuc
J
Zurück
Oben Unten