2012-03-19 75 views
0

我一直在測試我的應用程序在我的實際設備上,當我進行調試安裝時,一切正常。但是當我構建APK並安裝它時,該應用可以很好地加載到主屏幕上。當我點擊主屏幕上的一個圖像按鈕時,它會崩潰。同樣,如果我通過調試將應用程序部署到設備或者使用模擬器,那麼只有apk內部版本會在按鈕點擊時崩潰,該應用程序完美無缺。android apk imagebutton點擊崩潰

在我的XML,這裏是一個按鈕的例子:

<ImageButton 
android:id="@+id/btnHomeServices" 
android:src="@drawable/button_homeservices" 
android:scaleType="fitCenter"  
android:layout_width="wrap_content" 
android:layout_height="wrap_content"     
android:adjustViewBounds="true" 
android:layout_marginRight="3dip" 
android:layout_marginLeft="3dip" 
android:background="@null" 
android:onClick="HomeServicesClick"/> 

而在代碼中的點擊事件方法:

public void HomeServicesClick(View view) 
{ 
    //we do some stuff here 
} 

我甚至註釋掉內HomeServicesClick和它的代碼仍然崩潰,所以我知道這個問題不是它嘗試在該方法中執行的代碼。

03-19 11:02:18.605: ERROR/AndroidRuntime(18211): FATAL EXCEPTION: main 
03-19 11:02:18.605: ERROR/AndroidRuntime(18211): java.lang.IllegalStateException: Could not find a method HomeServicesClick(View) in the activity class com.WhiteLabel.LoadingScreen for onClick handler on view class android.widget.ImageButton with id 'btnHomeServices' 
03-19 11:02:18.605: ERROR/AndroidRuntime(18211):  at android.view.View$1.onClick(View.java:2178) 
03-19 11:02:18.605: ERROR/AndroidRuntime(18211):  at android.view.View.performClick(View.java:2532) 
03-19 11:02:18.605: ERROR/AndroidRuntime(18211):  at android.view.View$PerformClick.run(View.java:9293) 
03-19 11:02:18.605: ERROR/AndroidRuntime(18211):  at android.os.Handler.handleCallback (Handler.java:587) 
03-19 11:02:18.605: ERROR/AndroidRuntime(18211):  at android.os.Handler.dispatchMessage(Handler.java:92) 
+0

你有沒有**乾淨**你的項目? – waqaslam 2012-03-19 14:24:37

+0

我剛試過,沒有什麼不同。 – Jesse 2012-03-19 14:29:50

+0

它在模擬器上運行良好嗎? – waqaslam 2012-03-19 14:32:13

回答

0

答案是在堆棧跟蹤中。從命令行執行「adb logcat」,然後強制應用程序出錯。你會在日誌中看到一個堆棧跟蹤,準確地(幾乎)告訴你錯誤是什麼。

看看,

http://developer.android.com/reference/android/view/View.html#attr_android:onClick

它說,

在此查看上下文的方法來調用當視圖 點擊的名稱。該名稱必須對應於一個公共方法,該方法只需要使用 類型View的一個參數。例如,如果您指定了 android:onClick =「sayHello」,則必須聲明您的上下文(通常爲您的活動)的sayHello(View v)方法的公共void 。

+0

這隻發生在我從apk安裝應用程序時發生。我該如何使用logcat?此外,這發生在應用程序中的任何imagebutton點擊。 – Jesse 2012-03-19 14:29:36

+0

再次,答案是logcat。 logcat始終在運行。它不依賴於你從eclipse安裝(如果這就是你說的話)。您可以從命令行運行「adb logcat」,或者您可以在運行應用程序時保持eclipse連接。 – 2012-03-19 14:32:17

+0

這是很好的知道,我從來不知道它總是在運行......我得到了日食中的錯誤(我已經有一個logcat選項卡)。 java.lang.illegalstateexception:無法在視圖類android.widget.ImageButton上使用id'btnHomeServices' – Jesse 2012-03-19 14:40:55

0

問題是,如果您要製作發佈版本/使用proguard,則不應在佈局文件中指定onClick。您應該在onCreate中使用setOnClickListener。

+0

真的嗎?所以這種類型的功能僅用於調試目的?我想看看它在android文檔中的位置。但這是有道理的。我無法想象爲什麼他們會這樣做,然後讓你改變發佈的代碼。 – Jesse 2012-03-19 17:34:22

+0

問題是沒有人在添加Proguard之後進入文檔,說它會更改您在XML中指定的方法名稱。換句話說,「HomeServicesClick」方法可能重命名爲()或類似的東西。不幸的是,XML不會自動更新。 – 2012-03-19 18:41:43