2017-04-07 78 views
1

我能够使用CalendarView显示日历,但被卡在其中添加事件。我们可以通过JSON数据将日历添加到日历中。如果是,如何实现?如果没有,那么这将是另一种解决方案?我被困在里面超过2日,请帮助我们可以在日历中加载JSON数据(事件)吗?

日历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> 

CalenderFragment

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数据在日历内添加事件?

回答

0

让我明白你的问题,你想添加事件表单json数据? 如果是,那么你需要做

  1. 解析JSON数据

  2. 在日历中使用内容提供商添加事件(这里是一些链接可以帮助,或者你可以搜索在谷歌日历内容提供商

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. 如果复杂的数据,那么你需要的模型类来存储数据和使用任何对象进行排序(我发布的一个例子可以在谷歌搜索中搜索) Sort ArrayList<class> in Java

+0

我已经完成了几乎所有的工作。我在CalendarView下面创建了listView并能够显示events.But我想根据month显示特定的事件。可以这样做。我现在正在获取所有事件。检查。我现在得到这个 – Ghimire

+0

如果你把你的数据放在日历中然后显示事件月明智的容易,但我可以看到你直接在列表中显示数据。所以你需要使用数据结构和排序。我有一个应用程序相同的概念,但我使用日历API(https://play.google.com/store/apps/details?id=oca.eyehunt.in.oca) – rkkanojia7

+0

你能指导我如何使用数据结构和排序 – Ghimire

相关问题