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

时间:2014-07-28 12:05:22

标签: android json android-activity offline-caching

我在本地创建了一个json文件。我可以在数据> data> com.example.storage> files> filename.json中查看。使用这个,我想在本地获取所有文本值&下载所有图像并将其保存在图像URL中的SD卡中,该URL位于json文件中。在离线模式下我自己可以加载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"},]}

4 个答案:

答案 0 :(得分:1)

是的,有可能。下次提供一些代码,以便我们有一些工作,没有太多人可以做到解决这个问题。

为了让您开始查看有关JSON的本教程: http://www.vogella.com/tutorials/AndroidJSON/article.html

这个问题可以帮助您在本地阅读文件: How can I read a text file in Android?

当您将文件作为字符串获取时,您可以创建JSONObject并解析URL并检索图像。

答案 1 :(得分:0)

您是否尝试过使用Gson library for Android

我使用它并且它完美地工作,你将创建完全代表Json的对象。然后在Json上应用 Gson 方法,它将自动获取您创建的对象/对象中的所有数据。

如果您想要有关于如何使用 Gson 的教程,I think this guy explains really well. 我建议你在询问其他任何东西之前尝试这个技术,因为它是一个非常常用的库来解析Json Data。使用它之后,您将拥有完全反映Json文件内容的对象!

希望它有所帮助!

哦顺便说一下,here is a website that will help you farmat your Json。我发现它非常有用,希望你喜欢它;)

答案 2 :(得分:0)

这里是代码读取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;
}

答案 3 :(得分:0)

这很简单!在这里:

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();
    }
}

要读取属于app目录的内部文件,请尝试:

  this.openFileInput("yourfile.txt");
  //`this` is the reference to you Activity or Context

示例:

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);
}

更多详情here