0

我有一个读取 XML 文件、解析它并将单个元素加载到数组中的方法。代码本身在包含在 Activity 类中时可以工作。它需要从 2 个不同的活动中使用,因此我创建了一个实用程序类,以便我可以从所需的每个活动中调用一个副本。但是,当它从实用程序类运行时,我得到一个空点异常。这告诉我,我正在打破我能做什么以及从哪里做的规则。我怀疑这与对资源的访问有关,因为我还尝试访问字符串资源(仅作为测试),这也引发了 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 还很陌生,所以这对我来说是一次非常重要的学习经历。

先感谢您。

4

1 回答 1

0

您的 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);
于 2013-03-30T18:33:53.887 回答