当前位置: 首页 > 知识库问答 >
问题:

Android:带有事件的日历

易超
2023-03-14

我有一些关于Android日历的问题。我想添加数据库上的事件。我想要的是,当我打开我的日历片段时,它将调用web service并从服务器获取数据,其中包括日期和它们各自的事件,当我在日历中单击该日期时,它将显示指定日期的事件。我面临的问题是:

>

  • 在这一行date=sdf.parse(dates);上显示了一些错误,它说

    java.lang.NullPointerException
       at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1009)
       at java.text.DateFormat.parse(DateFormat.java:553)
       at com.example.aksystems.practiceportal.Calendar.showJSON(Calendar.java:118)
    

    在它成功运行之前的两天,问题是它会在日历日生成两次点。示例:我的服务器响应是

    [{"d":"a","events":"2017\/04\/13 18:20:43"},{"d":"a","events":"2017\/04\/10 18:20:40"}]`
    

    所以它会指向日期13一次,而日期10那么多次,为什么?

    calendar.java

    public class Calendar extends Fragment {
    
        CalendarView calendarView;
    
        private EditText editTextId;
        private Button buttonGet;
        private TextView textViewResult;
        String dates,events;
        private ProgressDialog loading;
        CompactCalendarView compactCalendarView;
        String id = "a";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date = null;
        public Calendar() {}
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    
            View view = inflater.inflate(R.layout.fragment_layout_calendar, container, false);
    
            compactCalendarView = (CompactCalendarView) view.findViewById(R.id.compactcalendar_view);
    
            editTextId = (EditText) view.findViewById(R.id.editTextId);
            buttonGet = (Button)view. findViewById(R.id.buttonGet);
            textViewResult = (TextView) view.findViewById(R.id.textViewResult);
            getData();
    
            return view;
    
        }
        private void getData() {
    
    
            loading = ProgressDialog.show(getActivity(),"Please wait...","Fetching...",false,false);
    
            String url = Config.DATA_URL+"?e="+id;
    
            StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>()
            {
                @Override
                public void onResponse(String response) {
                    loading.dismiss();
                    showJSON(response);
                }
            },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(getActivity(),error.getMessage().toString(),Toast.LENGTH_LONG).show();
                        }
                    });
    
            RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
            requestQueue.add(stringRequest);
        }
    
        private void showJSON(String response)
        {
    
            for (int i=0;i < response.length();i++)
    
            {
                try {
    
                    JSONObject jsonObject = new JSONObject(response);
                    JSONArray result = jsonObject.getJSONArray(Config.JSON_ARRAY);
                    JSONObject collegeData = result.getJSONObject(i);
                    dates = collegeData.getString(Config.KEY_DATES);
                    events = collegeData.getString(Config.KEY_EVENTS);
                    //vc = collegeData.getString(Config.KEY_VC);*/
    
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                // textViewResult.setText(""+dates);
    
                // String myDate = "2017/03/30 18:10:45";
    
                try
                {
                    date = sdf.parse(dates);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                // Convert Date into milliseconds
                assert date != null;
                long millis = date.getTime();
    
                Event ev1 = new Event(Color.RED, millis, events);
                compactCalendarView.addEvent(ev1);
               /* List<Event> events = compactCalendarView.getEvents(millis);
                Toast.makeText(getActivity(), "" + events, Toast.LENGTH_SHORT).show();*/
                compactCalendarView.setListener(new CompactCalendarView.CompactCalendarViewListener()
                {
                    @Override
                    public void onDayClick(Date dateClicked) {
                        List<Event> events = compactCalendarView.getEvents(dateClicked);
    
                        // Log.d(TAG, "Day was clicked: " + dateClicked + " with events " + events);
                        Toast.makeText(getActivity(), "" + events, Toast.LENGTH_SHORT).show();
                    }
    
                    @Override
                    public void onMonthScroll(Date firstDayOfNewMonth)
                    {
                        //  Log.d(TAG, "Month was scrolled to: " + firstDayOfNewMonth);
                       // Toast.makeText(getActivity(), "Month was scrolled to: " + firstDayOfNewMonth, Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }
    }
    
  • 共有1个答案

    洪璞瑜
    2023-03-14
    1. 这是因为您传递的日期不是当前格式。查看您的PHP脚本。
    2. 您的变量response.length()返回两个以上的值,因此它将指向上次日期中的多个事件。尝试使用jsonArray.size()查找响应的长度。
     类似资料:
    • 我正在寻找在特定日期添加事件的日历视图,如下所示: 默认的日历视图可以帮助我做同样的事情,或者有任何其他的API可以帮助获得像上面这样的结果吗? 让我知道! 谢谢

    • 问题内容: 我正在编写一个需要向Android日历中添加一些事件的应用程序。对于插入,我只使用了以下代码: 现在,我想知道是否有可能获得与该事件关联的ID,以这种方式在插入事件并将其ID保存到我的应用程序后,用户可以直接从应用程序内部调用该事件。可能吗? 问题答案: 我提取了用于将事件存储到android日历中的列的列表。这里的清单: [0]“ originalEvent”(id = 830007

    • 我想有一个月历视图显示所有的日子和事件在每一天。我找到了CalendarView,但它并不真正按我想要的方式显示事件。我一直在研究和检查大量的结果,直到我遇到了一个完整的应用程序,这就是SimpleMobileTools's Simple-Calendar。如果您还不明白我要找的是什么,下面是它们在月度视图日历上显示事件的方式: 不过,他们的应用程序有太多的功能,再加上它是一个完整的应用程序。我想

    • 问题内容: 当我以编程方式创建一个始终记为生日日历(类型)的日历事件时,我遇到了一个奇怪的问题,我不知道为什么会这样记录日历事件。 我使用的代码如下:Xamarin C# 请问有人有什么提示或想法可以指引我正确的方向吗? 提前致谢。 问题答案: 下面回答的问题是旧的,请参考Pkosta的答案,它提供了更准确的答案… 您必须将CalendarId值设置为3,而不是默认的生日日历1。例如 更改为 它为

    • 我想显示一个日历,其中包含在日期上使用不同颜色的事件,类似于默认日历应用程序。但是我在默认日历视图中没有看到任何这样的API。 有人能告诉我正确的方向吗?如何进行?我应该扩展默认日历并添加自己的功能吗?或者我应该使用带有PageViewer和片段的5x5文本框吗?

    • 问题内容: 我已经看到很多在类中使用Threads的Python脚本,其中许多使用。例如: 在循环中,为什​​么不设置条件就检查条件? 问题答案: 因为其他人会设置它。 通常,您在应用程序的一部分中启动一个线程,然后继续执行您所做的任何事情: 当您执行操作时,线程会执行操作。如果要终止线程,则只需调用: 并且线程将停止。 因此,答案是:在这种情况下,事件不用于从线程对象本身内部控制线程。它用于从外