如何从片段中的资产中读取和解析json文件



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,请使用以下代码

在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:

查看此官方文档。也可以查看这个媒体博客

最新更新