0

현재 Android 앱을 디버그하려고합니다. 나는 첫 번째 화면을 구축했으며 탭 호스트를 사용하고 있습니다. TabHost에 몇 가지 사소한 수정을 가하여 내 응용 프로그램의 다른 부분과 작업 할 몇 가지 추가 메서드 (전체 소스)를 추가했습니다.null 포인터 XML에서 팽창 할 때 예외 (TabActivity를 사용하지 않음)

그러나 다음을 실행하려고하면 Inflate에서 널 포인터 예외가 발생하고 실제로 이유는 알 수 없습니다. 내 SDK의 전체 Android 소스를 다운로드하고 Eclipse에서 인플레이션 프로세스를 단계별로 실행하여 오류에 대한 추가 정보를 얻을 수 있는지 찾아야합니다.

정확히 어떤 라인이 오류를 일으키는 지 알았지 만 (소스는 아래에 포함되어 있음) 디버거를 단계별로 실행하면 이상한 일이 발생했습니다. if/else 경우 if == true이면 새로운 Parser() 객체를 반환해야하고, 그 코드를 실행하고 Parser의 생성자를 성공적으로 밟았지만, 그 다음에 반환 된 다음 명령어는 바로 빠져 나갔다. 다음 행의 명령문 그룹은 널 (NULL)을 리턴합니다.

생성자가 제대로 실행 된 것 같습니다 (궁금한 점을 대비하여 XmlBlock.java에 있음) 아직 다음 줄로 이동하여 null을 반환하고 이것이 왜 발생하는지 전혀 모릅니다. 나는 솔루션을 찾았지만, 지금까지 유일한 문제는 내 애플리케이션에 적합하지 않은 TabActivity를 사용하는 누군가가 발생했다는 것입니다. 탭과 뷰가 프로젝트 내에서 정의한 객체 (IOS 스타일 뷰 컨트롤러와 유사)에 의해 생성되고 인 텐트를 사용하여 새로운 액티비티를 시작하는 과정을 분리하지 않아야합니다.

다른 사람이 내게 문제가 무엇인지 말해 줄 수 없기 때문에 누군가 내 출처를보고 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? http://pastebin.com/9VRE2UGW

+0

"앱의 다른 부분과 작업하는"활동에 "몇 가지 추가 메소드 추가"를 사용하는 경우 잘못된 동작을하는 것처럼 들립니다. – Falmarri

+0

저는 UI와 컨트롤러 로직을 조금 섞은 Android의 일종의 클래스/클래스를 Activities의 모든 것에서 정말 좋아하지 않습니다. 나는 더 깨끗한 분리 된 IOS 스타일의 ViewController 객체를 선호했다. 그래서 나는 그들 주위에 내 애플 리케이션을 디자인 해왔다. 좋은 VC 기본 클래스를 함께 던지고 거기에서 일하는 것이 그리 어렵지 않았습니다. 나는 이미 초기 문제를 해결하고 있으며 이제는 CSV를 SQLite 파서로 Objective-C에서 Java로 포팅하여 더 많은 작업을 수행하고 있습니다. – Fallout2man

답변

1

좋아요, 내 REAL 다음과 같습니다

TabBarController UITabBarController = 
    (TabBarController)interfaceBuilder.inflate(R.layout.tab_bar , null); 

당신 때문에 R.layout.tab_bar이 대표는 TabHost가 문제는 여기에 내 디버그 정보에 대한 안드로이드 DDMS 관점에서 찾고 아니었다. 나는 원래 Java Debug 퍼스펙티브가 모든 필요한 정보를 줄 것이라고 생각했다. 이 예외의 실제 원인은 프로그램의 다른 곳에서 발생했습니다. 이제는 로그캣을 읽고 있는데, 내 나머지 부분은 내 실제 문제 (부적절한 정보)이므로 직접 해결할 수 있어야합니다.

+0

누군가가 진짜 오류가 무엇인지 알고 싶었을 경우에 대비하여 여기에 의견을 남길 것이라고 생각했습니다. 내보기를 부 풀린 후 TabHost.setup() 호출 깜빡. 내가 본 TabActivity를 사용한 예는 여기에서 내가 특별히 언급하지 않은 이유를 언급했습니다.) 어떤 경우에는 초기화 후에 TabHost.setup()을 수동으로 호출해야하며 그렇지 않은 경우에는 수동으로 호출해야합니다. 이전에 그 사실을 알지 못했고 탭 위젯이 TabHost의 속성 내에 올바르게 지정되지 않았기 때문에 탭 추가를 시도 할 때 Null 포인터 예외가 발생했습니다. – Fallout2man

0

내가이 줄 잘못 생각 : 여기에 포함 된 소스에 또 다른 직접 링크의

<?xml version="1.0" encoding="utf-8"?> 
<TabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@android:id/tabhost"> 
     <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
       <TabWidget 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:id="@android:id/tabs" 
       android:layout_alignParentBottom="true" /> 

       <FrameLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:id="@android:id/tabcontent"> 
       </FrameLayout> 
     </RelativeLayout> 
</TabHost> 
+0

알았어, 고마워, 실제로 그 태그를 잊어 버렸어. 실제로 올바른 정식 Java 클래스 이름으로 대체되었습니다. 아직 작동하지 않습니다. 나는 다른 경로를 찾아 대신 View.inflate()를 시도했지만 ClassNotFound 예외가 발생합니다. ClassLoader가 컴파일 타임에 컴파일러가 문제가없는 런타임에 주어진 클래스를 찾지 못하는 이유는 무엇입니까? – Fallout2man