bug_ _java.lang.RuntimeException: Unable to start activity ComponentInfo{包名/類名}


 
寫這篇博文,我頂着很大的壓力,貼出來會引來網友的一片鄙視,不貼我又覺得對不起Android SDK研發團隊。
本着對全世界Android無產者負責的態度,今天不得不指出Android編譯時隱藏的很深的一個Bug.
 
以下為我的TestActivity類:
public class TestActivity extends Activity {
    private static final String TAG = "TestActivity";
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
 
       button = (Button)findViewById(R.id.btn);
       button.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
               Log.d(TAG, "onClick. ");
          }
     });
    }
}
 
該類在AndroidMenifest.xml中是這樣設置的:
                  android:label="@string/app_name">
            
                
                
            
 
布局文件為res/layout/main.xml:
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
 
    
         android:layout_height="wrap_content" android:text="start"/>
 
很簡單吧,當我編譯時,也完全正常.但是當在Eclipse中點擊運行時,拋出如下異常:
 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.orange.test/com.orange.test.TestActivity}: java.lang.NullPointerException
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
     at android.os.Handler.dispatchMessage(Handler.java:99)
     at android.os.Looper.loop(Looper.java:123)
     at android.app.ActivityThread.main(ActivityThread.java:4627)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:521)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
     at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
     at com.orange.test.TestActivity.onCreate(TestActivity.java:24)
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
     ... 11 more
 
很是匪夷所思,這么一個簡單的問題,button=(Button)findViewById(R.id.btn);
button對象值竟然為null,我又去查看gen/目錄下的com.orange.test.R.java文件:內容如下
public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int icon=0x7f020000;
    }
     public static final class id {
        public static final int btn=0x7f050000;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
    }
}
 
一切都正常啊,R.id.btn這不是正常地生成了嗎!!!!,找來大拿,不頂用,同樣沒有發現。
最后無意識地發現, android:name="@+id/btn"  應該是android:id="@+id/btn" .
悲劇的是,Android編譯時,竟然沒有發現這里的錯誤。
 最為可氣的是,竟然還在R.java文件中生成了
 public static final class id {
        public static final int btn=0x7f050000;
    }
這得害了多少無辜的程序員。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM