2014-09-27 2 views
1

이 하나가 나와 내 팀을 완전히 미치게합니다.findViewById가 null을 반환합니다. TextView

우리의 모든 테스트 장치에서 제대로 작동하기 때문에 재현 할 수 없지만 setContentView를 호출 한 후 및 onCreate에서 findViewById에 의해 얻은 TextView에 대해 java.lang.NullPointerException을 발생시켜 수천 개의 오류 보고서가 발생하고 있습니다. 정확한 ID와 레이아웃 파일) 여기서

java.lang.RuntimeException: Unable to start activity ComponentInfo{xxxxxxxxxxxxx.activities.PremiumActivity}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122) 
     at android.app.ActivityThread.access$600(ActivityThread.java:140) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1228) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4895) 
     at java.lang.reflect.Method.invokeNative(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761) 
     at dalvik.system.NativeStart.main(NativeStart.java) 
Caused by: java.lang.NullPointerException 
     at xxxxxxxxx.activities.PremiumActivity.onCreate(PremiumActivity.java:258) 
     at android.app.Activity.performCreate(Activity.java:5163) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2061) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122) 
     at android.app.ActivityThread.access$600(ActivityThread.java:140) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1228) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4895) 
     at java.lang.reflect.Method.invokeNative(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761) 
     at dalvik.system.NativeStart.main(NativeStart.java) 

이 방법에서 onCreate :

마지막 줄은 NullPointerException이 유발 한 것을
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.premium_activity_layout); 
    premiumInfoHeaderTextView = (TextView) findViewById(R.id.premiumHeaderTextView); 
    int themeColor = MPThemeManager.getSharedInstance(this).themeColor(); 
    premiumInfoHeaderTextView.setTextColor(themeColor); 

(라인 258)

012 3,516,

확실하지 그것은 관련 그러나 활동은 우리는 또한 다른 곳에서 사용할로에서 onCreate 방법 이외의 텍스트 뷰로 선언

그리고 물론 premiumInfoHeaderTextView의 SherlockFragmentActivity

확장 할 수있는 경우.

+2

다른 자격을 갖춘 폴더에 premium_activity_layout의 사본이 여러 개있을 수 있습니까? –

+0

다른 레이아웃에서 동일한 이름의 "premiumHeaderTextView"라는 다중 ID를 선언했지만 premium_activity_layout에 정의되지 않았을 수 있습니다. 다시 한 번 확인하십시오. – Yogendra

+0

@ G.BlakeMeike는 레이아웃 파일을 하나만 복사합니다. – Erwan

답변

3

미친 버그에 대한 미친 수정!

내가 이전에 언급 한 바에 따르면, 버그는 사실 우리의 최신 버전에서 (/ res/layout-large 아래의) 태블릿 용 이전 레이아웃 xml 파일이 제거되었다는 사실에서 비롯된 것입니다 (이제는 단일 레이아웃 파일/res/layout 아래에 있음).

귀무 예외의 원인이 라인을 기억

premiumInfoHeaderTextView = (TextView) findViewById(R.id.premiumHeaderTextView); 

이것은 우리의 이전 버전의 레이아웃이 업그레이드 사용자를위한 일부 태블릿에 어떤 식 premiumHeaderTextView보기와 그렇게하지 못했다는 사실 때문입니다 새 버전 이전에는 이전 레이아웃 파일이 삭제되지 않았으므로 시스템은 새로운 (모든 장치에 공통적 인)/res/layout보다는 이전 /res/layout-large/premium_activity_layout.xml에서 id를 찾고 있습니다 /premium_activity_layout.xml

크래시 틱스를 사용하여 모든 충돌이 t ablet 장치는 apk가 업그레이드 될 때 오래된 리소스 파일을 보관해서는 안되기 때문에 일부 타블렛의 시스템 버그처럼 보이는이 "버그"를 식별하는 데 중요했습니다.

그래서 요약, 나는/입술/레이아웃 큰 새로운 레이아웃을 사용하는 태블릿 사용자를 강제하기 위해와 "캐시"오래된하지 버전으로 /res/layout/premium_activity_layout.xml을 복사. 버그가 완전히 수정되었습니다

관련 문제