0

あるフラグメントから別のフラグメントに渡される int/string(s) があります。コーディングする方法ごとに、67 行目に NPE が表示されます (67 が下にある場所を参照)。正しい方法で行っているかどうかわかりませんので、私の方法を調べて、回答にコードを含めてください。

ありがとうございます。

引数を渡すもの:

. . .
        int rawRes = R.raw.regulatory_list;//<--THIS IS THE RES I NEED TO PASS
        args.putInt("KEY_RAW_RES", rawRes);

        boolean isRawRes = true;
    args.putBoolean("KEY_IS_RAW_RES", isRawRes);

        ListViewFragment lvf = new ListViewFragment();
        lcFT.replace(R.id.discriptionListContainer, lvf).commit();
        lvf.setArguments(args);
. . .

ListViewFragment の onActivityCreated:

. . .
private static final String KEY_URL = "KEY_URL";
    private static final String KEY_IS_RAW_RES = "KEY_IS_RAW_RES";
    private static final String KEY_RAW_RES = "KEY_RAW_RES";
. . .

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

// Get the string to query from last Fragment and pass it to this
        // Fragment
        Bundle args = this.getArguments();

        String url = args.getString(KEY_URL);
        boolean rawRes = args.getBoolean(KEY_IS_RAW_RES);

        int fileName = (Integer) null;//<--THIS IS LINE 67!!
        fileName = args.getInt(KEY_RAW_RES);

        this.runJsonFile(url, jsonSrc, fileName);
}

private void runJsonFile(String url, boolean rawRes, int fileName) {

    if (rawRes == true) {
        getFromRawRes(fileName);
    } else {
        getFromURL(url);
    }
}

    private void getFromRawRes(int fileName) {
//      InputStream file = getResources().openRawResource(R.raw.regulatory_list);
        InputStream file = getResources().openRawResource(fileName);
        JSONParser jParser = new JSONParser();
        JSONArray json = jParser.getJSONFromFile(file);
        callback(json);
    }

編集:

Raghav Soodの回答に従って、67行目から68行目を次のように変更します。

//      int fileName = (Integer) null;
        int fileName = args.getInt(KEY_RAW_RES);

これにより、クラスはNPEを通過しました-Thnx!!

4

2 に答える 2

2

null 値を整数変数にキャストしています。そもそも null を使用しているため、これが NullPointerException にならないシナリオは考えられません。Java や他のいくつかの言語では、整数、倍精度、char などのプリミティブ データ型を null にすることはできません。

于 2012-06-11T17:13:36.493 に答える
2

また、 to のキャストと同様nullInteger、このメソッドはまったく論理的な意味を持ちません。

private void runJsonFile(String url, String resType, int fileName) {
        String rawRes = null;
        if (ListViewFragment.KEY_RES_TYPE == rawRes) {
            getFromRawRes(fileName);
        } else {
            getFromURL(url);
        }
    }
}

これは常にelseブロックに行きます。に初期化rawResしてから、 null 以外のnullに対してテストしています。final Stringこのifステートメントが true と評価されるインスタンスはありません。

于 2012-06-11T17:21:17.480 に答える