在Java Android中加载外部JSON文件

时间:2015-05-25 18:51:00

标签: java android json sqlite

我刚开始学习Java。我目前正在开发一个从.JSON文件中检索数据的小应用程序,并将其存储到SQLite数据库中。

我尝试打开。JSON文件并将其存储为JSONObject。这是我读取JSON文件的代码。

private JSONObject readFile(String path) {
    StringBuilder sb = new StringBuilder();
    try {
        FileReader in = new FileReader(new File(path));
        int b;
        while((b = in.read()) != -1) {
            sb.appendCodePoint(b);
        }
        in.close();

        return new JSONObject(sb.toString());
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return null;
}

我的JSON文件存储在: app \ src \ main \ java \ proj \ bb \ database \ jsonFiles 我当前正在调用readFile方法,如下所示:但它会抛出NullPointer。 (DatabaseOperations是类名)。

JSONObject jsonFile = readFile(DatabaseOperations.class.getResource("filename.json").toString());
JSONArray arr = jsonFile.getJSONArray("someArray");

我也没有成功地试过这个:

JSONObject jsonFile = readFile("jsonFiles/filename.json").toString());
JSONArray arr = jsonFile.getJSONArray("someArray");

所以我的问题是,我需要通过哪条路径作为参数传递?或者我做错了什么?

提前致谢!

1 个答案:

答案 0 :(得分:2)

将您的JSON文件放在assets文件夹中并从那里访问它。 您可以使用以下方法将数据读取为 -

public static String getJSONData(Context context, String textFileName) {
    String strJSON;
    StringBuilder buf = new StringBuilder();
    InputStream json;
    try {
        json = context.getAssets().open(textFileName);

        BufferedReader in = new BufferedReader(new InputStreamReader(json, "UTF-8"));

        while ((strJSON = in.readLine()) != null) {
            buf.append(strJSON);
        }
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return buf.toString();
}

Method将返回JSON字符串,您可以将JSONObject的实例创建为

外部json文件为:sample.json

String jsonString = getJSONData(MainActivity.this, "sample.json");

JSONObject jsonObject = new JSONObject(jsonString);