【问题标题】:How to Get an Android openRawResource as a Variable?如何获取 Android openRawResource 作为变量?
【发布时间】:2012-06-11 17:10:48
【问题描述】:

我有一个从一个片段传递到另一个片段的 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!!

【问题讨论】:

  • 你为什么要把null转换成Integer

标签: android string variables resources arguments


【解决方案1】:

您正在将空值转换为整数变量。没有任何可能的情况不会导致 NullPointerException,因为您首先使用的是 null。在 Java 和其他几种语言中,整数、双精度、字符等原始数据类型不能为空。

【讨论】:

    【解决方案2】:

    还要补充一下,以及将null 转换为Integer,这种方法绝对没有任何逻辑意义:

    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,然后针对非空的final String 对其进行测试。这个if 语句永远不会评估为真。

    【讨论】:

    • Thnx:在您发布此答案之前,我刚刚编辑了该内容,但感谢您抓住它。 String rawRes = KEY_RES_TYPE;
    • 给我一点时间来完成它!完全错过了应对。
    • 再说一次 Thinx,给我一点时间来完成它!只需要让它运行 - 现在我必须将其更改为布尔值。患者
    • 只是说说而已。无论如何,没有理由在这里建立它,因为您的问题已得到解答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    相关资源
    最近更新 更多