簡體   English   中英

Android解析XML文件空指針異常

[英]Android parsing of XML file Null Pointer Exception

我有一個讀取XML文件的方法,將其解析並將單個元素加載到數組中。 當代碼包含在Activity類中時,代碼本身即可工作。 它需要在2個不同的Activity中使用,所以我創建了一個實用工具類,這樣我就可以從每個需要的Activity中調用一個副本。 但是,當它從實用程序類運行時,出現了空點異常。 這告訴我,我正在打破我可以做什么以及從哪里做的規則。 我懷疑這與對資源的訪問有關,因為我也嘗試訪問字符串資源(僅作為測試),並且還會拋出NPE。

這是實用程序類。 第一個Log.i出現在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");
.
.
.
}

這是來自上面調用該方法的Activity中的代碼:

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);
    }
.
.
.
}

我確定我犯了一個經典錯誤,但我看不到它,並且到目前為止我還沒有找到指導。 對於任何反饋,我們都表示感謝。 我是Java和Android的新手,因此這對我來說是一種學習經驗。

先感謝您。

您的Utils類不應擴展Activity 活動是您面向用戶的界面,這意味着當您想向用戶顯示某種UI時,您實現了一個活動。 閱讀有關Activity的文檔。

您的Utils類應如下所示:

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;
    }
}

然后在您的Activity中,您將像這樣調用Utils方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM