【问题标题】:Can we Load JSON Data(Events) within Calendar?我们可以在日历中加载 JSON 数据(事件)吗?
【发布时间】:2017-04-07 20:57:49
【问题描述】:

我可以使用 CalendarView 显示日历,但无法在其中添加事件。我们可以通过 JSON 数据将事件添加到日历中的日期。如果可以,如何实现?如果不是,那么替代解决方案是什么?我被困在其中超过 2 天。请帮助

日历 xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#2E353D"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="30dp"
                android:layout_height="match_parent"
                android:padding="3dp"
                android:src="@mipmap/calander" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="8dp"
                android:text="Calendar"
                android:textColor="#fff"
                android:textSize="17dp"
                android:textStyle="bold" />

        </LinearLayout>
    </LinearLayout>


    <CalendarView
        android:id="@+id/calendar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />


    <ListView
        android:id="@+id/calenderlist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


</LinearLayout>

日历片段

public class CalenderFragment extends Fragment {
    CalendarView calendar;
    String Navigation_URL = "http://192.168.100.5:84/api/academics/getEvents";
    String access_token;
    ListView listView;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


        View view = inflater.inflate(R.layout.calender, container, false);
        getActivity().setTitle("");
        setHasOptionsMenu(true);

        calendar = (CalendarView) view.findViewById(R.id.calendar);
        calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {

            @Override
            public void onSelectedDayChange(CalendarView view,
                                            int year, int month, int dayOfMonth) {
                Toast.makeText(getContext(),
                        dayOfMonth + "/" + month + "/" + year, Toast.LENGTH_LONG).show();
            }
        });


        listView = (ListView) view.findViewById(R.id.calenderlist);
        SessionManagement session = new SessionManagement(getContext());
        session.checkLogin();
        access_token = session.getAccesstToken();

        makeJsonObjectRequest();

        return view;
    }

    private void makeJsonObjectRequest() {

        RequestQueue requestQueue = Volley.newRequestQueue(getContext());
        String URL = Navigation_URL;
        StringRequest stringRequest = new StringRequest(Request.Method.GET, URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {

                            ArrayList<CalenderPojoStudent> student_list_calender = new ArrayList<>();

                            JSONArray jArray = new JSONArray(response);
                            for (int i = 0; i < jArray.length(); i++) {
                                JSONObject jsonObject = jArray.getJSONObject(i);
                                String StartAt = jsonObject.getString("StartAt").substring(6, 10);


                                String Title = jsonObject.getString("Title");
                                student_list_calender.add(new CalenderPojoStudent(StartAt, Title));


                            }

                            CalenderAdapter calenderAdapter = new CalenderAdapter(getActivity(), student_list_calender);
                            listView.setAdapter(calenderAdapter);


                        } catch (JSONException e) {
                            Toast.makeText(getContext(), "Fetch failed!", Toast.LENGTH_SHORT).show();
                            e.printStackTrace();
                        }
                    }

                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getContext(), error.toString(), Toast.LENGTH_LONG).show();
            }
        }) {

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headers = new HashMap<String, String>();
                headers.put("Authorization", "Bearer " + access_token);
                headers.put("Content-Type", "application/x-www-form-urlencoded");
                return headers;
            }
/*
            @Override
            protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
                Map<String, String> map = new HashMap<String, String>();

                map.put("id", master_id);
                map.put("accessID", accessID);
                map.put("currentUser", master_id);
                return map;

            } */
        };


        requestQueue.add(stringRequest);

    }


    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.dashboard, menu);
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // handle item selection
        switch (item.getItemId()) {
            case R.id.action_settings:
                // do s.th.
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

}

如何通过 JSON 数据在日历中添加事件?

【问题讨论】:

    标签: android json calendar


    【解决方案1】:

    让我理解你的问题,你想要添加事件表单 json 数据吗? 如果是,那么您需要这样做

    1. 解析 JSON 数据

    2. 使用 Content Provider 在日历中添加活动(这里有一些链接可以提供帮助,或者您可以在 Google Calendar Content provider 中搜索)

      李>

    https://developer.android.com/guide/topics/providers/calendar-provider.html

    How to read and edit Android calendar events using the new Android 4.0 Ice Cream Sandwich API?

    如果您不了解android 内容提供者,建议先学习一下。 https://developer.android.com/guide/topics/providers/content-providers.html

    数据排序:

    1. 如果只有单值数据,那么可以做很简单的排序方式 http://beginnersbook.com/2013/12/how-to-sort-arraylist-in-java/

    2. 如果数据复杂,那么您需要模型类来存储数据并使用任何对象进行排序(我发布的一个示例,其余的您可以在 google 中搜索) Sort ArrayList<class> in Java

    【讨论】:

    • 我已经完成了几乎所有的工作。我在 CalendarView 下创建了 listView 并能够显示事件。但我想根据月份显示特定事件。可以这样做。我正在获取所有事件现在。#edited 请检查。我现在就收到了
    • 如果你把你的数据放在日历中然后显示事件月份很容易,但我可以看到你直接在列表中显示数据。所以你需要使用数据结构和排序。我有一个相同概念的应用程序,但我使用了日历 api (play.google.com/store/apps/details?id=oca.eyehunt.in.oca)
    • 你能指导我如何使用数据结构和排序
    • @Ghimire 当然,我更新了答案,如果有任何疑问,请告诉我,一切顺利!
    猜你喜欢
    • 1970-01-01
    • 2020-02-21
    • 2021-02-17
    • 2015-03-22
    • 1970-01-01
    • 2020-11-24
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多