Android 如何从本地json文件获取数据?

Android 如何从本地json文件获取数据?,android,json,android-activity,offline-caching,Android,Json,Android Activity,Offline Caching,我在本地创建了一个json文件。我可以在data>data>com.example.storage>files>filename.json中查看。使用这个,我想在本地获取所有文本值&下载所有图像,并从json文件中提供的图像URL将其保存在SD卡中。在离线模式下,我可以加载json文件中的所有文本值以及SD卡中的图像 请让我知道这个想法是否可行。如果没有,请建议其他方法 任务使用本地JSON文件,我想获取数据。如何做到这一点?(我对每个数据使用单独的ID) 示例JSON文件是 {"ImageDa

我在本地创建了一个json文件。我可以在data>data>com.example.storage>files>filename.json中查看。使用这个,我想在本地获取所有文本值&下载所有图像,并从json文件中提供的图像URL将其保存在SD卡中。在离线模式下,我可以加载json文件中的所有文本值以及SD卡中的图像

请让我知道这个想法是否可行。如果没有,请建议其他方法

任务使用本地JSON文件,我想获取数据。如何做到这一点?(我对每个数据使用单独的ID)

示例JSON文件是

{"ImageData":[{"ImageId":"12","ImageName":"Img1","ImageDesc":"Img1 Img1Img1 ","ImageUrl":"img_url/pro1.jpg"},{"ImageId":"13","ImageName":"Img13","ImageDesc":"Img13 Img13 Img13Img13 ","ImageUrl":"img_url/pro2.jpg"},{"ImageId":"14","ImageName":"Img14","ImageDesc":"Img14 Img14 Img14 Img14 Img14 ","ImageUrl":"img_url/pro3.jpg.jpg"},]}

是的,这是可能的。下一次提供一些代码,这样我们就有了一些东西可以使用了,人们没有多少办法来解决这个问题

要开始学习,请阅读关于JSON的本教程:

此问题将帮助您在本地读取文件:

当您以字符串形式获取文件时,您可以创建一个
JSONObject
,解析URL并检索图像。

您是否尝试过使用

我正在使用它,它工作得非常好,您将创建完美地表示Json的对象。然后对Json应用Gson方法,它将自动获取您创建的对象中的所有数据

如果您想获得有关如何使用Gson的教程, 我建议您在询问其他问题之前尝试一下这项技术,因为它是解析Json数据的非常常用的库。使用它之后,您将拥有能够准确反映Json文件内容的对象

希望有帮助


哦,顺便说一句。我自己也觉得很有用,希望你会喜欢;)

这里是从文件中读取的代码,该文件保存在项目的资产文件夹中

public JSONObject readDummyResponse() {
    InputStream inputStream = null;
    try {
        inputStream = this.getAssets().open("sample_response.txt");
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    JSONObject jsonObject = null;
    if (inputStream != null) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                inputStream));
        StringBuffer buffer = new StringBuffer();
        String statement;
        try {
            while ((statement = reader.readLine()) != null) {
                if (statement.trim().length() > 0) {
                    buffer.append(statement);
                }
            }
        } catch (IOException e1) { // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        if (buffer.length() > 0) {
            try {
                jsonObject = new JSONObject(buffer.toString());
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
    return (JSONObject) jsonObject;
}

这很简单!下面是:

private void DoWork() {
    File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),
            "file.json"); //path to your file assuming its in root of SD card

    String content = "";
    try {
        BufferedReader br = new BufferedReader(new FileReader(file));
        try {
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();

            while (line != null) {
                sb.append(line);
                line = br.readLine();
            }
            content = sb.toString();
        } finally {
            br.close();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException io) {
        io.printStackTrace();
    }

    mTextView.setText(""); // A multiline text view big enough
    mTextView.append("\n\n-----START CONTENT-----\n\n");
    mTextView.append(content);
    mTextView.append("\n\n-----START JSON-----\n\n");

    try {
        JSONArray jsonArray = new JSONArray(content);
        int length = jsonArray.length();

        for (int i = 0; i < length; i++) { /itterate throu json array
            JSONObject obj = jsonArray.getJSONObject(i);

             //here you can access individual parts of you json object by getString()...getBoolean().... etc...

            mTextView.append("\n" + obj.toString()); 
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
例如:

FileInputStream in = openFileInput("filename.txt");
InputStreamReader inputStreamReader = new InputStreamReader(in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder sb = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
    sb.append(line);
}

更多详细信息

如果您认为这是正确答案,请将其标记为已解决。(:祝你有一个美好的一天,祝你好运!@rawa我的json文件在内存中。请建议任何代码。我已经完成了。请参阅我发布的第二个链接。JSONObject可以从如下字符串创建:new JSONObject(string JSONObject)@rawa如果你接受我的问题,请投票支持我的问题。谢谢你的回答。但是我在内存中保存json文件。请对此提供帮助。然后你可以给出
inputStream
Google
如何读取文件内存android
@和Ruboy抱歉,我想我编辑了你的答案,而不是我自己的:P如果我没有,请检查一下去你的吧。对不起!@andruboy,我实现了你的代码,我得到了错误,请澄清。(请再次参考问题)正如我看到的,您的错误表明您有JSONArray,在我的代码中,我正在开发JSONObject,因此您必须根据您的代码更改代码@kevin如果您接受我的问题,请投我的票。@Sean87请让我知道如何显示获取的数据?
FileInputStream in = openFileInput("filename.txt");
InputStreamReader inputStreamReader = new InputStreamReader(in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder sb = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
    sb.append(line);
}