0

XML ファイルを読み込んで解析し、個々の要素を配列にロードするメソッドがあります。コード自体は、Activity クラスに含まれている場合に機能します。2 つの異なるアクティビティから使用する必要があるため、必要な各アクティビティから 1 つのコピーを呼び出せるようにユーティリティ クラスを作成しました。ただし、ユーティリティ クラスから実行すると、null ポイントの例外が発生します。これは、自分ができること、どこからできるかというルールを破っていることを示しています。文字列リソースにも(テストとして)アクセスしようとしたところ、NPEもスローされたため、リソースへのアクセスに関連していると思われます。

これがユーティリティクラスです。最初の Log.i は LogCat に表示されますが、2 番目は表示されません。

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

私は古典的な間違いを犯していると確信していますが、私はそれを見ていません。また、まだガイダンスを見つけることができませんでした. フィードバックをいただければ幸いです。私は 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 に答える