2013-01-20 16 views
1

我仍然在學習Android應用程序開發,當我開始製作一個非常簡單的應用程序時,谷歌地圖api v2(尚未使用它),當我在我的索尼Xperia SL上運行時,它說「不幸myapp停止」。 LogCat中的紅色味精屬於「無法打開要讀取的文件」(兩次)。爲什麼我的android應用程序崩潰與「不幸的myapp停止」錯誤?

MainMenu.java

public class MainMenu extends Activity { 

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

    Button bntStart = (Button) findViewById(R.id.buttonStart); 
} 

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

MainActivity.java

public class MainActivity extends Activity { 

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

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

} 

activity_main_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/menu_bg" 
android:gravity="center_vertical" 
android:orientation="vertical" > 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" > 

    <Button 
     android:id="@+id/buttonStart" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_margin="5dp" 
     android:text="Start" /> 

    <Button 
     android:id="@+id/buttonStop" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_margin="5dp" 
     android:text="Stop" /> 

</LinearLayout> 

<Button 
    android:id="@+id/buttonExit" 
    android:layout_width="80dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_margin="5dp" 
    android:text="Exit" /> 

</LinearLayout> 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<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 
    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.MapFragment" /> 

</RelativeLayout> 

清單

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

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

<permission 
    android:name="taxi.route.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="taxi.route.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" > 
    <activity 
     android:name="taxi.route.MainMenu" 
     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="AIzaSyCwPOMQ3LaE81JN3wdY6DvUi7EIJdn0q-I" /> 

    <activity 
     android:name="taxi.route.MainActivity" 
     android:label="activity_main" > 
    </activity> 
</application> 

</manifest> 

堆棧跟蹤(我不知道如果多數民衆贊成在啄)

01-20 17:48:32.129: D/dalvikvm(663): Late-enabling CheckJNI 
01-20 17:48:32.399: D/TextLayoutCache(663): Using debug level: 0 - Debug Enabled: 0 
01-20 17:48:32.459: D/libEGL(663): loaded /system/lib/egl/libGLES_android.so 
01-20 17:48:32.469: D/libEGL(663): loaded /system/lib/egl/libEGL_adreno200.so 
01-20 17:48:32.469: D/libEGL(663): loaded /system/lib/egl/libGLESv1_CM_adreno200.so 
01-20 17:48:32.469: D/libEGL(663): loaded /system/lib/egl/libGLESv2_adreno200.so 
01-20 17:48:32.509: I/Adreno200-EGLSUB(663): <ConfigWindowMatch:2078>: Format RGBA_8888. 
01-20 17:48:32.519: D/memalloc(663): /dev/pmem: Mapped buffer base:0x5c67c000 size:27111424 offset:23343104 fd:64 
01-20 17:48:32.519: E/(663): Can't open file for reading 
01-20 17:48:32.519: E/(663): Can't open file for reading 
01-20 17:48:32.529: D/OpenGLRenderer(663): Enabling debug mode 0 
01-20 17:48:32.529: W/ResourceType(663): No package identifier when getting value for resource number 0x00000001 
01-20 17:48:32.529: D/AndroidRuntime(663): Shutting down VM 
01-20 17:48:32.529: W/dalvikvm(663): threadid=1: thread exiting with uncaught exception (group=0x40aa8210) 
01-20 17:48:32.529: E/AndroidRuntime(663): FATAL EXCEPTION: main 
01-20 17:48:32.529: E/AndroidRuntime(663): android.content.res.Resources$NotFoundException: Resource ID #0x1 
01-20 17:48:32.529: E/AndroidRuntime(663): at android.content.res.Resources.getValue(Resources.java:1023) 
01-20 17:48:32.529: E/AndroidRuntime(663): at android.content.res.Resources.loadXmlResourceParser(Resources.java:2110) 
01-20 17:48:32.529: E/AndroidRuntime(663): at android.content.res.Resources.getLayout(Resources.java:862) 
01-20 17:48:32.529: E/AndroidRuntime(663): at android.view.MenuInflater.inflate(MenuInflater.java:92) 
01-20 17:48:32.529: E/AndroidRuntime(663): at taxi.route.MainMenu.onCreateOptionsMenu(MainMenu.java:21) 
01-20 17:48:32.529: E/AndroidRuntime(663): at android.app.Activity.onCreatePanelMenu(Activity.java:2444) 
01-20 17:48:32.529: E/AndroidRuntime(663): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:392) 
01-20 17:48:32.529: E/AndroidRuntime(663): at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:743) 
01-20 17:48:32.529: E/AndroidRuntime(663): at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:2838) 
01-20 17:48:32.529: E/AndroidRuntime(663): at android.os.Handler.handleCallback(Handler.java:605) 
01-20 17:48:32.529: E/AndroidRuntime(663): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-20 17:48:32.529: E/AndroidRuntime(663): at android.os.Looper.loop(Looper.java:137) 
01-20 17:48:32.529: E/AndroidRuntime(663): at android.app.ActivityThread.main(ActivityThread.java:4441) 
01-20 17:48:32.529: E/AndroidRuntime(663): at java.lang.reflect.Method.invokeNative(Native Method) 
01-20 17:48:32.529: E/AndroidRuntime(663): at java.lang.reflect.Method.invoke(Method.java:511) 
01-20 17:48:32.529: E/AndroidRuntime(663): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
01-20 17:48:32.529: E/AndroidRuntime(663): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
01-20 17:48:32.529: E/AndroidRuntime(663): at dalvik.system.NativeStart.main(Native Method) 
01-20 17:48:35.009: I/Process(663): Sending signal. PID: 663 SIG: 9 
+1

你會發現在你的日誌中有一個堆棧跟蹤 - 基本上它是由於例外(幾乎肯定)「停止」。找出例外的細節,並修復你的代碼以避免它。 –

+0

發佈您的堆棧跟蹤 – Araw

回答

0

最有可能你正面臨因爲這條線在MainMenu的問題:

getMenuInflater().inflate(1, menu); 

inflate()需要一個指向XML菜單文件的資源ID和一個Menu對象。但是,1幾乎肯定不是有效的ID,導致出現異常。嘗試將ID傳遞給菜單XML文件。

+0

如何獲取activity_main_menu.xml的標識(對不起,如果這是個愚蠢的問題)並感謝您的快速回答! –

+0

在哪個文件夾中是文件? –

+0

從它看起來,'activity_main_menu.xml'是您的佈局名稱,並且您沒有爲此定義meny。在這種情況下,只需刪除'onCreateOptionsMenu()'方法。 –

-1

習慣使用異常處理,使您不必應用,只是崩潰。至少這樣做:

try { 
    /// my code 
} catch (Trowable t) { 
    Log.e("MyTag", t.getMessage(), t); 
} 

大多數時候,你想做些什麼更多的時間:

try { 
      /// my code 
} catch (MostLikelyException mle) { 
    /// Handle the exception 
} catch (LikelyException le) { 
    /// Handle the exception 
} catch (Trowable t) { 
    /// Handle the exception 
} 

既然你不能讓你的日誌,解決方法是使用舉杯獲得異常信息。

將每種方法的代碼包裝在try/catch中。當你發現異常時,用Toast.makeText處理它(this/指向活動 /,t.getMessage,Toast.LENGTH_LONG).show();

找到你不能讓你的日誌應該是一個高優先級的原因。

相關問題