2

我正在尝试传递从 JSON 字符串中提取的 Int 值以减少代码冗余。

在我的 JSON 文件中,我在“ resFile ”中有一个字符串值。我将此字符串存储到TAG_RES_FILE中,我想将它作为 Int 传递到 Bundle 中。

如果您查看我的代码,您会看到注释//TRY #1//。这按预期工作,但我需要Int来自存储我的TAG_RES_FILE的变量。在评论//TRY #2// 只是我想要发挥作用的一个例子 - 显然它没有。在下一行中,我尝试将标记字符串转换为Int但这会产生以下运行时错误:

java.lang.NumberFormatException:无效的 int:“resFile”

我什至尝试将 0x7f060000(来自 R.java)放入 JSON 字符串。

所以我的问题是:我该如何做到这一点?我是在正确的轨道上还是应该以完全不同的方式去做?

感谢您的帮助和输入 - 请在您的答案中显示代码示例。

JSON字符串片段:

[
    {
        "_id": "1",
        "label": "A Lable",
        "title": "Some Title",
        "description": "Bla, bla, bla",
        "containerID": "Some container id",
        "isRawRes": "boolean value here",
        "resFile": "R.raw.advisory_circulators_sort_list"
    }, {. . .
]

在我的哈希图中:

// Parse the string to a JSON object
        for (int i = 0; i < json.length(); i++) {
            JSONObject json_data = json.getJSONObject(i);

            // Storing each json item in variable
            String id = json_data.getString(TAG_ID);
            String label = json_data.getString(TAG_LABEL);
            String title = json_data.getString(TAG_TITLE);
            String description = json_data.getString(TAG_DISCR);
            String containerID = json_data.getString(TAG_FRAG_ID);
            String isRawRes = json_data.getString(TAG_IS_RAW_RES);
            String resFile = json_data.getString(TAG_RES_FILE);

            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();

            // adding each child node to HashMap key => value
            map.put(TAG_ID, id);
            map.put(TAG_LABEL, label);
            map.put(TAG_TITLE, title);
            map.put(TAG_DISCR, description);
            map.put(TAG_FRAG_ID, containerID);
            map.put(TAG_IS_RAW_RES, isRawRes);
            map.put(TAG_RES_FILE, resFile);

            // adding HashList to ArrayList
            mList.add(map);
}

在我的 ListViews setOnItemClickListener 中:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    . . .

        final Bundle args = new Bundle();

//TRY #1//int rawRes = R.raw.advisory_circulators_sort_list; <--I NEED TO GET THIS IN FROM MY TAG!!
//TRY #2//int rawRes = TAG_RES_FILE; <-- TO SOMETHING LIKE THIS!!
        int passResFile = Integer.parseInt(TAG_RES_FILE);//<--THIS GIVES A NPE!!
        args.putInt("KEY_RES_FILE", passResFile);

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

        // Delayed to improve animations
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            public void run() {
                ListViewFragment lvf = new ListViewFragment();
                lcFT.replace(R.id.listContainer, lvf).commit();
                lvf.setArguments(args);
            }
        }, 300);
    }
4

1 回答 1

1

相反,只需存储advisory_circulators_sort_list而不是R.raw.advisory_circulators_sort_list. 然后,要获取整数标识符,请使用以下方法:

int passResFile = getResources().getIdentifier( resFile, "raw", getPackageName() );
于 2012-06-12T17:44:43.157 回答