【问题标题】:How to read and parse json file from assets in fragment [duplicate]如何从片段中的资产中读取和解析json文件[重复]
【发布时间】:2020-09-22 08:46:09
【问题描述】:

Place.json

[
 {
 "image":"https://www.google.com/search?q=eyfel+building&tbm=isch&ved=2ahUKEwiR2PaFivrrAhVTsSoKHSVaBD4Q2-cCegQIABAA&oq=eyfel+building&gs_lcp=CgNpbWcQAzoECAAQQzoCCAA6BAgAEB46BggAEAUQHjoGCAAQCBAeOgQIABAYUIUCWLAtYLMuaABwAHgAgAHUAYgBgwySAQUwLjcuMZgBAKABAaoBC2d3cy13aXotaW1nwAEB&sclient=img&ei=nIVoX5GaGNPiqgGltJHwAw&bih=657&biw=1366#imgrc=933tG8AS_Jkn7M"
 "title": "Eyfel"
 },

 {
 "image":"https://www.google.com/search?q=london+bridge&tbm=isch&ved=2ahUKEwjck-mKivrrAhWJtioKHb4XCXAQ2-cCegQIABAA&oq=london+br&gs_lcp=CgNpbWcQARgAMgIIADICCAAyAggAMgIIADICCAAyAggAMgIIADICCAAyAggAMgIIADoFCAAQsQM6BAgAEB46BggAEAUQHjoECAAQQzoHCAAQsQMQQzoECAAQAjoECAAQEzoICAAQCBAeEBM6BggAEB4QE1CKG1jKSGDDT2gEcAB4AoABwwWIAY8fkgENMC45LjMuMS4wLjEuMZgBAKABAaoBC2d3cy13aXotaW1nwAEB&sclient=img&ei=poVoX9yoKIntqgG-r6SABw&bih=657&biw=1366#imgrc=AktppXugiJmZ1M"
 "title": "London Bridge"
 },
 {
 "image":"https://www.google.com/search?q=kollizey&tbm=isch&ved=2ahUKEwj7nKifivrrAhVHposKHXccCDAQ2-cCegQIABAA&oq=kollizey&gs_lcp=CgNpbWcQAzIGCAAQChAYOgUIABCxAzoCCAA6BAgAEEM6BAgAEB46BAgAEAJQrPEBWPf_AWDPhAJoAHAAeAGAAeoDiAHJD5IBCTAuNC4yLjEuMZgBAKABAaoBC2d3cy13aXotaW1nwAEB&sclient=img&ei=0YVoX7vwJsfMrgT3uKCAAw&bih=657&biw=1366#imgrc=DcT4Bw_ZnOZn_M"
 "title": "Collosseo"
 },
 {
 "image":"https://www.google.com/search?q=pryramids&tbm=isch&ved=2ahUKEwihjsawivrrAhWGyyoKHZMUBEgQ2-cCegQIABAA&oq=pryramids&gs_lcp=CgNpbWcQAzIECAAQEzIECAAQEzIICAAQBRAeEBMyCAgAEAUQHhATMggIABAFEB4QEzIICAAQBRAeEBM6AggAOgUIABCxAzoGCAAQChABOgQIABAKOgQIABAeOgQIABACUKOwAViJjwJg4o8CaANwAHgAgAHIAYgB_RGSAQYwLjEwLjKYAQCgAQGqAQtnd3Mtd2l6LWltZ7ABAMABAQ&sclient=img&ei=9YVoX-G_L4aXqwGTqZDABA&bih=657&biw=1366#imgrc=RxDXCkN4m6hJyM"
 "title": "Pyramids"
 },
]

【问题讨论】:

  • 其实这个JSON已经不对了。最后一个逗号 ',' 是不必要的..

标签: android json


【解决方案1】:

要解析 JSON,请使用此代码

在 Java 中

public String loadJSONFromAsset() {
    String json = null;
    try {
        InputStream is = getActivity().getAssets().open("Place.json"); // your file name 
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        json = new String(buffer, "UTF-8");
    } catch (IOException ex) {
        ex.printStackTrace();
        return null;
    }
    return json;
}

用法:

String jsonString = loadJSONFromAsset();
if(jsonString != null){
    try {
       JSONObject json = new JSONObject(jsonString);
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

分段获取

您可以通过 Intent 将数据传递给 Fragment 或使用ViewModelActivityFragment 之间共享数据

使用意图:

// In Activitry 
Bundle bundle = new Bundle();
bundle.putString("dataKey", "Shared String");
MyFragment fragment = new MyFragment();
fragment.setArguments(bundle);

// In Fragment 
 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    String sharedString = getArguments().getString("dataKey");    
    return inflater.inflate(R.layout.fragment, container, false);
}

使用 ViewModel:

查看this 官方文档。也可以查看thisMedium Blog

【讨论】:

  • 解析在Activity中,使用在Fragment中?
  • 您可以在 Fragment 中通过Intent 传递数据,也可以使用ViewModelActivityFragment 之间共享数据
猜你喜欢
  • 2015-01-21
  • 2014-05-08
  • 2017-12-23
  • 1970-01-01
  • 2020-11-27
  • 2017-07-04
  • 1970-01-01
  • 2019-11-19
  • 2020-05-22
相关资源
最近更新 更多