У меня есть проблема с календарем в android. Я хочу добавить события, которые находятся в базе данных. В основном я хочу, когда я открою свой календарный фрагмент, он вызовет веб-службу и извлечет данные с сервера, который включает даты и их соответствующие события, когда я нажимаю на эту дату в календаре, он показывает мне события в указанную дату. Вопросы, с которыми я столкнулся:
-
Он показывает некоторую ошибку в этой строке
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();
}
});
}
}
}