java - 如何从片段中调用一个类
问题描述
我正在开发一个将 json 文件保存到设备缓存中的小项目。在我的 Home_fragmen 上,我从网络文件中加载 json 并保存文件。
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("photos");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject hit = jsonArray.getJSONObject(i);
String id = hit.getString("id");
mlist.add(new items(id));
}
mAdapter = new main_adapter(getActivity(), mlist);
mRecyclerView.setAdapter(mAdapter);
// Cashing json file
jsonFile= response.toString();
cacheJson(jsonFile);
}
private void cacheJson(String data) {
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(getActivity().openFileOutput("jsontxt.txt", Context.MODE_PRIVATE));
outputStreamWriter.write(data);
outputStreamWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
这是我用来从缓存中读取数据的代码
private String readJson() {
String jsonArray = "";
try {
InputStream inputStream = getActivity().openFileInput("jsontxt.txt");
if ( inputStream != null) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receivingString = "";
StringBuilder stringBuilder = new StringBuilder();
while ((receivingString = bufferedReader.readLine()) != null) {
stringBuilder.append(receivingString);
}
inputStream.close();
jsonArray = stringBuilder.toString();
}
} catch (FileNotFoundException e) {
Log.e(TAG, "File not found: " + e.toString());
} catch (IOException e) {
Log.e(TAG, "Can not read file: " + e.toString());
}
return jsonArray;
}
所有这些都在我的主要片段上工作,因为那里拥有一切……现在我要做的是从不同的片段中读取缓存一个新的片段。
我试过做这些但没有用。
Home_fragment jsonFile = new Home_fragment ();
String s = jsonFile.cachejson();
Log.e(TAG, "JSON FILE: " + s);
我的问题是如何从辅助片段读取访问我的主片段上的 readJson() 。
解决方案
使方法独立于片段的上下文 (getActivity) 并将该上下文作为参数传递。然后将该方法放在两个片段的公共可访问对象上,然后您可以从任何地方访问它。
推荐阅读
- html - 如何对齐html表格行
- laravel - 更新关系 Laravel 的值
- qt - Qt,在 QkeyPressedEvent 中使用 QMessageBox 时 QTimer 出现问题
- javascript - 如何获得正确的 CDN 链接以从 react-select/creatable 导入 CreatableSelect?
- python - 将键值对转换为字符串
- angular - Angular Formarray中的级联DropDownList:选择下拉菜单时会更改其他行中其他下拉菜单的值
- flutter - Flutter 中的控制器如何在不调用 setstate 的情况下重建小部件
- c - 如何在 c 中将换行符发送到标准输入并允许 fgets(cmdline, MAXLINE, stdin) 接收它?
- html - 速卖通的跨度属性中的这些自定义属性是什么?“ae_some_name=”等
- sugarcrm - 全局 suitecrm 搜索中未显示自定义模块的结果