2015-04-06 135 views
0

Hye大家好,我是法國人,所以對我英語不好。 對於我的家庭作業,我必須提出一個應用程序誰顯示我的智能手機的位置在谷歌地圖,但是當我在我的connect.xml中添加片段時,應用程序崩潰:「不幸[app]已停止」谷歌地圖Android碎片崩潰

我的Google Play服務很好,!

com.google.android.gms文本:ConfigApi連接成功

我覺得我AndroidManifest也不錯

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


<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"/> 

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

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".Main" 
     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=".Connect" > 
    </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="AIzaSyDQDHg-zejSDW1UHhPef79kOeAlkkXWwyM" /> 
</application> 

</manifest> 

現在是我的connect.xml

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

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/txtView" 
     android:layout_width="318dp" 
     android:layout_height="wrap_content" 
     android:text="Large Text" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <Button 
      android:id="@+id/btnUpdate" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Update position" /> 

     <Button 
      android:id="@+id/btnGetCar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Where is my car ?" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/txtPosition" 
     android:layout_width="318dp" 
     android:layout_height="wrap_content" 
     android:text="Large Text" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <fragment 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.MapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</LinearLayout> 

</merge> 

我的連接。 java

package com.supinfo.tesas; 

import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 
import com.supinfo.tesas.model.Car; 
import com.supinfo.tesas.model.User; 

public class Connect extends Activity implements OnClickListener { 
SharedPreferences user; 
TextView txtView; 
TextView txtPosition; 
Button btnGetCar; 
Button btnUpdate; 


String username; 
String password; 

User u = new User(); 
Car c; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.connect); 
    btnGetCar = (Button) findViewById(R.id.btnGetCar); 
    btnGetCar.setOnClickListener(this); 

    btnUpdate = (Button) findViewById(R.id.btnUpdate); 
    btnUpdate.setOnClickListener(this); 

    user = this.getSharedPreferences("user",Context.MODE_PRIVATE); 
    username = user.getString("username", ""); 
    password = user.getString("password", ""); 

    txtView = (TextView) findViewById(R.id.txtView); 
    txtView.setText("Bonjour "+username); 

    txtPosition = (TextView) findViewById(R.id.txtPosition); 

    GoogleMap googleMap; 
    googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 

} 



@Override 
public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.btnGetCar: 
      c = u.getCarPosition(username,password); 
      Log.i("latitude",""+c.getLatitude()); 
      break; 
     case R.id.btnUpdate: 

      //mettre les latitude longiture 
      if(u.updatePosition(username, password, "", "")){ 
       Log.i("updatePosition","true"); 
      } 
      break; 
    }  
} 

@Override 
protected void onDestroy() { 
    // TODO Auto-generated method stub 
    //map.removeView(this.mMapView); 
    super.onDestroy(); 
} 

}

我有一個Main.java誰做重定向Connect.java

這是我的日誌

04-06 10:29:04.963: D/AndroidRuntime(2671): Shutting down VM 
04-06 10:29:04.986: E/AndroidRuntime(2671): FATAL EXCEPTION: main 
04-06 10:29:04.986: E/AndroidRuntime(2671): Process: com.supinfo.tesas, PID: 2671 
04-06 10:29:04.986: E/AndroidRuntime(2671): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.supinfo.tesas/com.supinfo.tesas.Connect}:  android.view.InflateException: Binary XML file line #42: Error inflating class  fragment 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.ActivityThread.access$800(ActivityThread.java:144) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.os.Handler.dispatchMessage(Handler.java:102) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.os.Looper.loop(Looper.java:135) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.ActivityThread.main(ActivityThread.java:5221) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at java.lang.reflect.Method.invoke(Native Method) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at java.lang.reflect.Method.invoke(Method.java:372) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
04-06 10:29:04.986: E/AndroidRuntime(2671): Caused by: android.view.InflateException: Binary XML file line #42: Error inflating class fragment 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.view.LayoutInflater.inflate(LayoutInflater.java:479) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:377) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.Activity.setContentView(Activity.java:2144) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at com.supinfo.tesas.Connect.onCreate(Connect.java:36) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.Activity.performCreate(Activity.java:5937) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  ... 10 more 
04-06 10:29:04.986: E/AndroidRuntime(2671): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.SupportMapFragment: make sure class name exists, is public, and has an empty constructor that is public 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.Fragment.instantiate(Fragment.java:618) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.Fragment.instantiate(Fragment.java:582) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2108) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.Activity.onCreateView(Activity.java:5286) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  ... 21 more 
04-06 10:29:04.986: E/AndroidRuntime(2671): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.maps.SupportMapFragment" on path: DexPathList[[zip file "/data/app/com.supinfo.tesas-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]] 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  at android.app.Fragment.instantiate(Fragment.java:604) 
04-06 10:29:04.986: E/AndroidRuntime(2671):  ... 25 more 
04-06 10:29:04.986: E/AndroidRuntime(2671):  Suppressed: java.lang.NoClassDefFoundError: com.google.android.gms.maps.SupportMapFragment 
04-06 10:29:04.986: E/AndroidRuntime(2671):   at dalvik.system.DexFile.defineClassNative(Native Method) 
04-06 10:29:04.986: E/AndroidRuntime(2671):   at dalvik.system.DexFile.defineClass(DexFile.java:226) 
04-06 10:29:04.986: E/AndroidRuntime(2671):   at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219) 
04-06 10:29:04.986: E/AndroidRuntime(2671):   at dalvik.system.DexPathList.findClass(DexPathList.java:321) 
04-06 10:29:04.986: E/AndroidRuntime(2671):   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54) 
04-06 10:29:04.986: E/AndroidRuntime(2671):   ... 28 more 
04-06 10:29:04.986: E/AndroidRuntime(2671):  Suppressed: java.lang.ClassNotFoundException: com.google.android.gms.maps.SupportMapFragment 
04-06 10:29:04.986: E/AndroidRuntime(2671):   at java.lang.Class.classForName(Native Method) 
04-06 10:29:04.986: E/AndroidRuntime(2671):   at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
04-06 10:29:04.986: E/AndroidRuntime(2671):   at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
04-06 10:29:04.986: E/AndroidRuntime(2671):   at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
04-06 10:29:04.986: E/AndroidRuntime(2671):   ... 27 more 
04-06 10:29:04.986: E/AndroidRuntime(2671):  Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

謝謝您的幫助! :)

+0

請問你在這裏發佈你的日誌? – 2015-04-06 10:28:17

+0

好的,那樣做 – Raph 2015-04-06 10:36:04

回答

0

你給錯了安卓名connect.xml

代替:不是

GoogleMap googleMap; 
googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 

android:name="com.google.android.gms.maps.MapFragment" 

用途:

class="com.google.android.gms.maps.SupportMapFragment" 

在Java文件

使用:

SupportMapFragment supportMapFragment = 
     (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
googleMap = supportMapFragment.getMap(); 
+0

如果我這樣做,我應該改變活動到FragmentActivity? – Raph 2015-04-06 10:45:27

+0

yes ..'extends FragmentActivity' – Kushal 2015-04-06 10:47:36

+0

那麼,我該如何重定向到FragmentActivity? with Intent? – Raph 2015-04-06 10:50:35

0

擴展與FragmentActivity您的活動類似下面一行:

public class Connect extends FragmentActivity implements OnClickListener { 
+0

我如何重定向到FragmentActivity?用意圖? – Raph 2015-04-06 10:53:41

+0

與您打算進行任何其他活動一樣。 – Pankaj 2015-04-06 11:39:32

1

這是工作!這是因爲我忘了這個

<permission 
    android:name="com.supinfo.tesas.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" /> 
<uses-permission android:name="com.supinfo.tesas.permission.MAPS_RECEIVE" /> 

謝謝大家!