在“ Material-Calendar-View”插件的日历中添加事件的问题

时间:2019-06-07 11:08:54

标签: java android android-volley android-calendar

我正在尝试从服务器获取JSON响应,然后解析它,并将一些日期事件添加到Material-Calendar-View插件的日历中。

这几乎可以正常工作,但是日历中的日期修饰不是立即添加,而是在日历中滚动视图页面之后添加。

我有一个想法,我应该将所有代码放到另一个线程中,因为有一个异常

  

跳过31帧!该应用程序可能在其主线程上做过多的工作。

但是我不确定是否应该这样做,如果我应该这样做,我也不知道该怎么做。

public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        events = new ArrayList<>();
        calendarView = (CalendarView) getView().findViewById(R.id.calendarView);
        mRequestQueue = VolleySingleton.getInstance(getContext()).getRequestQueue();
        JSONParse();
        calendarView.setEvents(events);
    }
    private void JSONParse() {
        String url = "https://api.myjson.com/bins/14htbv";
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                response -> {
                    try {
                        jsonArray = response.getJSONArray("info_stories");
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject hit = jsonArray.getJSONObject(i);
                            String dateStr = hit.getString("date");
                            String text_main = hit.getString("text_main");

                            Date date = sdf.parse(dateStr);
                            Calendar cal = Calendar.getInstance();
                            cal.setTime(date);
                            events.add(new EventDay(cal, R.drawable.ic_home));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }, error -> {
                    error.printStackTrace();
                });
        mRequestQueue.add(request);
    }

1 个答案:

答案 0 :(得分:0)

解决了问题

public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    events = new ArrayList<>();
    calendarView = (CalendarView) getView().findViewById(R.id.calendarView);
    mRequestQueue = VolleySingleton.getInstance(getContext()).getRequestQueue();
    JSONParse();
}
private void JSONParse() {
    String url = "https://api.myjson.com/bins/14htbv";
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
            response -> {
                try {
                    jsonArray = response.getJSONArray("info_stories");
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject hit = jsonArray.getJSONObject(i);
                        String dateStr = hit.getString("date");
                        String text_main = hit.getString("text_main");

                        Date date = sdf.parse(dateStr);
                        Calendar cal = Calendar.getInstance();
                        cal.setTime(date);
                        events.add(new EventDay(cal, R.drawable.ic_home));
                        calendarView.setEvents(events);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }, error -> {
                error.printStackTrace();
            });
    mRequestQueue.add(request);
}