2013-03-30 1 views
0

XML 파일을 읽고 구문 분석하여 개별 요소를 배열에로드하는 메서드가 있습니다. 코드 자체는 Activity 클래스에 포함될 때 작동합니다. 2 가지 액티비티에서 사용해야하므로 유틸리티 클래스를 만들었으므로 필요한 각각의 액티비티에서 하나의 복사본을 호출 할 수 있습니다. 그러나, 그것이 유틸리티 클래스에서 실행되면, 나는 널 포인트 예외를 얻는다. 이것은 내가 할 수있는 것과 할 수있는 것의 규칙을 어 기고 있음을 말해줍니다. 나는 리소스에 대한 액세스와 관련이 있다고 의심한다. (또한 테스트와 마찬가지로) 문자열 리소스에 액세스하려고 시도했으며 NPE도 throw한다.XML 파일의 Android 구문 Null 포인터 예외

다음은 유틸리티 클래스입니다. 첫 번째 Log.i는 LogCat에 나타나지만 두 번째 LogCat에는 없습니다.

class Utils extends MainActivity 
{ 
String debugTag   = DEBUG_TAG + "/Utils"; 

public void loadRankFile() throws XmlPullParserException, IOException 
{  
    int  eventType  = -1; 
    boolean boolFoundRanks = false; 
    int  intCounter  = 0; 

    // this line appears in LogCat  
    Log.i(debugTag, "Inside loadRankFile utility."); 

    // this line causes the NPE  
    XmlResourceParser scoutRanks = getResources().getXml(R.xml.scoutranks); 

    // this line does not appear in LogCat  
    Log.i(debugTag, "xml file loaded"); 
. 
. 
. 
} 

은 위 방법을 호출하는 활동의 코드입니다 :

public class RankProgressActivity extends MainActivity 
{ 
String debugTag   = DEBUG_TAG + "/RankProgressActivity"; 

Utils utilities = new Utils(); 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.rank_progress); 

    try 
    { 
     initSelectScout(); 
     utilities.loadRankFile(); 
     initSelectRank(); 
    } 
    catch (IOException e) 
    { 
     Log.i(debugTag, "Failure initializing Scout Progress activity items", e); 
    }  
    catch (XmlPullParserException e) 
    { 
     Log.e(debugTag, "Rank file parse error.", e); 
    } 
. 
. 
. 
} 

나는 고전적인 실수를하고있어 확실 해요,하지만 난 그것을 볼 수 없습니다, 그리고 아직까지 지침을 찾을 수 없었습니다. 모든 의견을 주시면 감사하겠습니다. 나는 자바와 안드로이드에 익숙하지 않기 때문에 이것은 나를위한 매우 많은 학습 경험이다.

미리 감사드립니다.

답변

0

Utils 클래스는 Activity으로 확장하지 않아야합니다. 활동은 사용자가 직면하는 인터페이스입니다. 즉, 사용자에게 일종의 UI를 표시하려는 경우 활동을 구현한다는 의미입니다. Activity에 대한 설명서를 읽으십시오.

귀하의 Utils 클래스는 다음과 같이 보일 것이다 :

ArrayList<String> scoutRanks = Utils.parseRankFile(this); 
+0

안녕 아 코스 Cz에 :

class Utils { private static final String DEBUG_TAG = "Utils"; public ArrayList<String> parseRankFile(Context context) throws XmlPullParserException, IOException { ArrayList<String> scoutRanks = new ArrayList<String>(); Log.i(DEBUG_TAG, "Inside loadRankFile utility."); XmlResourceParser scoutRanksParser = context.getResources().getXml(R.xml.scoutranks); Log.i(DEBUG_TAG, "xml file loaded"); // do your parsing and populate the scoutRanks ArrayList return scoutRanks; } } 

그런 다음 활동에 당신은 당신이 같은 경우 Utils 방법 부를 것이다 나는 제안을 적용한 만들었지 만 그건 내가 가지고있는 기본 이슈에 도움이되지 못했다. XML 파일의로드는 NPE (XmlResourceParser scoutRanks = getResources(). getXml (R.xml.scoutranks);)를 생성하는 명령문입니다. 이 문장은 Log.i 문으로 둘러싸여 있습니다. 첫 번째 메시지는 표시되고 두 번째 메시지는 표시되지 않습니다. 따라서 클래스 내 배열 사용이 아니라 res/xml의 XML 파일과 같이 클래스가 설정되고 리소스에 액세스되는 방식에 대해 설명합니다. 아이디어가 있습니까? 제공 할 수있는 도움에 감사드립니다. –

+0

감사합니다, Akos Cz - 내가 잘못한 것을 발견했습니다. 솔루션에 컨텍스트를 제공했지만 변경 내용을 적용 할 때 컨텍스트를 생략했습니다. 그 이후로 컨텍스트를 추가하고 NPE를 지나쳤습니다. 올바른 방향으로 움직여 주셔서 다시 한번 감사드립니다. –

+0

문제가 없습니다. 내가 도울 수있어서 기뻐. 유용하다고 생각되면 답변을 수락하십시오 :) –