2017-04-06 172 views
1

我有一些關於Android日曆的問題。我想添加數據庫中的事件。我基本上想要的是當我打開日曆片段時,它會調用Web服務並從服務器獲取數據,其中包括日期和它們各自的事件,當我在日曆中單擊該日期時,它會顯示指定日期的事件。這是我面臨的問題是:Android:事件日曆

  1. 這表明在這一行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) 
    
  2. 兩天,問題是它會產生日曆天點兩次。例如:我的服務器響應

    [{"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(); 
       } 
      }); 
     } 
    } 
} 

回答

0
  1. 這是因爲你的傳遞日期不是當前格式。查看你的PHP腳本。
  2. 您的變數response.length()返回值超過兩個,因此它會指向上一個日期中的多個事件。嘗試使用JSONArray.size()來查找響應的長度。
+0

感謝它幫助我很多。解決了這兩個問題 – Wjd