android - 新的 json 数据未在 android 中显示
问题描述
从我的服务器检索 json 数据。第一次在我的应用程序中显示数据。但是在更新新数据时,它没有显示。只显示旧数据..当我从应用程序中清除缓存时,它会显示更新的数据。但我想同时显示实时数据。我必须做什么?请帮我。
主页.java
public class Home extends Fragment {
private final String JSON_URL = "https://mywebsite.org/news/api.php";
private JsonArrayRequest request ;
private RequestQueue requestQueue ;
private List<Anime> lstAnime ;
private RecyclerView recyclerView ;
ProgressBar loading;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_home, container, false);
loading = (ProgressBar)root.findViewById(R.id.bar);
loading.setMax(100);
lstAnime = new ArrayList<>() ;
recyclerView = root.findViewById(R.id.recyclerviewid);
jsonrequest();
return root;
}
private void jsonrequest() {
request = new JsonArrayRequest(JSON_URL, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
loading.setVisibility(View.GONE);
JSONObject jsonObject = null ;
for (int i = 0 ; i < response.length(); i++ ) {
try {
jsonObject = response.getJSONObject(i) ;
Anime anime = new Anime() ;
anime.setName(jsonObject.getString("title"));
anime.setDescription(jsonObject.getString("description"));
anime.setDate(jsonObject.getString("date"));
anime.setCategorie(jsonObject.getString("category"));
anime.setAuthor(jsonObject.getString("admin"));
anime.setImage_url(jsonObject.getString("thumbnail"));
lstAnime.add(anime);
} catch (JSONException e) {
e.printStackTrace();
}
}
setuprecyclerview(lstAnime);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof TimeoutError || error instanceof NoConnectionError) {
//This indicates that the request has either time out or there is no connection
Toast.makeText(getActivity(), "TimeOut...! No Internet",
Toast.LENGTH_LONG).show();
} else if (error instanceof AuthFailureError) {
// Error indicating that there was an Authentication Failure while performing the request
Toast.makeText(getActivity(), "Failed To Receive Data",
Toast.LENGTH_LONG).show();
} else if (error instanceof ServerError) {
//Indicates that the server responded with a error response
Toast.makeText(getActivity(), "Our Server Under Maintenance",
Toast.LENGTH_LONG).show();
} else if (error instanceof NetworkError) {
//Indicates that there was network error while performing the request
Toast.makeText(getActivity(), "Network Not Responding",
Toast.LENGTH_LONG).show();
} else if (error instanceof ParseError) {
// Indicates that the server response could not be parsed
Toast.makeText(getActivity(), "Please Reload Again!",
Toast.LENGTH_LONG).show();
}
}
});
requestQueue = Volley.newRequestQueue(getActivity());
requestQueue.add(request);
}
private void setuprecyclerview(List<Anime> lstAnime) {
RecyclerViewAdapter myadapter = new RecyclerViewAdapter(getActivity(),lstAnime);
recyclerView.setAdapter(myadapter);
// grid columns is 2
GridLayoutManager manager = new GridLayoutManager(getActivity(), 2);
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
// 0 is first one and 9 is first one all of others are 2 columns
if (position == 0 || position == 9) {
return 2;
}
return 1;}
});
recyclerView.setItemAnimator(null);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(myadapter);
recyclerView.setLayoutManager(manager);
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}
}
对不起,我的英语不好。提前致谢。
解决方案
如果您想在服务器上的数据更新后立即更新您的应用程序中的数据,那么您应该使用 Web-Sockets 而不是 API,因为 API 只有在您使用正确的凭据点击它时才会给出响应。
推荐阅读
- python - 用于灵活创建日期时间范围的 Python 函数
- html - 在特定位置绘制/放置元素到 SVG 图像上
- nginx - VPS 上的 Laradock 尝试访问域时出现 HTTP ERROR 500 错误
- flutter - Flutter Provider 和 sqflite 集成
- java - 如何使用事件来计算重复事件的结束日期
- java - 如何从具有条件的多对多关系中选择实体
- javascript - 如何等待 Subject.next
- java - Tomcat Servlet Logger 不打印所有内容
- javascript - “此交互失败”除了此错误,我根本找不到问题
- go - 我想知道Gin Framwork函数,类似于http.Get和http.Post