Android如何使用Caldroid Lib中的asynctask中的数据填充日历

Dou*_*oos 0 java android hashmap android-asynctask android-calendar

我正在使用Caldroid Lib在我的Android App中创建一个自定义日历,我需要从我的Web服务器加载数据,我有一个asynctask填充HashMap然后我把这些数据放在这样的arraylist中:

class Asistencia extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... params) {

            arraylist = new ArrayList<HashMap<String, String>>();
            // Retrieve JSON Objects from the given URL address
            jsonobject = JSONfunctions
                    .getJSONfromURL("http://www.gettford.net/comunidad/api/calendario.php?usuarioID="
                            + usuarioID);
            if (jsonobject != null && jsonobject.length() > 0) {
                try {
                    // Locate the array name in JSON
                    jsonarray = jsonobject.getJSONArray("datos");

                    for (int i = 0; i < jsonarray.length(); i++) {
                        HashMap<String, String> map = new HashMap<String, String>();
                        jsonobject = jsonarray.getJSONObject(i);
                        // Retrive JSON Objects
                        map.put("title", jsonobject.getString("title"));
                        map.put("dtstart", jsonobject.getString("dtstart"));
                        map.put("dtend", jsonobject.getString("dtend"));
                        map.put("color", jsonobject.getString("color"));
                        arraylist.add(map);
                    }
                } catch (JSONException e) {
                    Log.e("Error", e.getMessage());
                    e.printStackTrace();
                }
            } else {
                errores = "conexion";
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void args) {

        }

    }
Run Code Online (Sandbox Code Playgroud)

现在做完asynctask之后,我需要在日历上设置事件并设置单元格的背景颜色.

我怎样才能实现这一目标?

我想也许可以在这里完成:

private void setCustomResourceForDates() {

        new Asistencia().execute();

                Calendar cal = Calendar.getInstance();

                // Min date is last 7 days
                cal.add(Calendar.DATE, -11);
                Date redDate = cal.getTime();

                // Max date is next 7 days
                cal = Calendar.getInstance();
                cal.add(Calendar.DATE, 2);
                Log.e("fecha", "" + redDate);
                Date orangeDate = cal.getTime();

                if (caldroidFragment != null) {
                    caldroidFragment.setBackgroundResourceForDate(R.color.red,
                            redDate);
                    caldroidFragment.setBackgroundResourceForDate(
                            R.color.orange, orangeDate);
                    caldroidFragment
                            .setTextColorForDate(R.color.white, redDate);
                    caldroidFragment.setTextColorForDate(R.color.white,
                            orangeDate);
                }
                ArrayList<Date> disabledDates = new ArrayList<Date>();
                for (int i = 4; i < 8; i++) {
                    cal = Calendar.getInstance();
                    cal.add(Calendar.DATE, i);
                    disabledDates.add(cal.getTime());
                }

                caldroidFragment.setDisableDates(disabledDates);
                caldroidFragment.refreshView();
    }
Run Code Online (Sandbox Code Playgroud)

Dou*_*oos 5

我回答自己,对于任何需要填充caldroid的人,你可以使用以下代码:

protected void onPostExecute(ArrayList<HashMap<String, String>> args) {

            for (i = 0; i < arraylist.size(); i++) {
                Calendar cal = Calendar.getInstance();

                HashMap<String, String> map = arraylist.get(i);

                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
                        "yyyy-MM-dd", Locale.getDefault());
                try {
                    Date orangeDate = simpleDateFormat
                            .parse(map.get("dtstart"));

                    // Max date is next 7 days
                    /*
                     * cal = Calendar.getInstance(); cal.add(Calendar.DATE, 2);
                     * Log.e("fecha", "" + redDate); Date orangeDate =
                     * cal.getTime();
                     */
                    Log.e("fecha", "" + orangeDate);
                    String color = map.get("color");
                    if (caldroidFragment != null) {
                        if (color.equals("red")) {
                            caldroidFragment.setBackgroundResourceForDate(
                                    R.color.red, orangeDate);
                            caldroidFragment.setTextColorForDate(R.color.white,
                                    orangeDate);
                        }
                        if (color.equals("orange")) {
                            caldroidFragment.setBackgroundResourceForDate(
                                    R.color.orange, orangeDate);
                            caldroidFragment.setTextColorForDate(R.color.white,
                                    orangeDate);
                        }
                    }
                    ArrayList<Date> disabledDates = new ArrayList<Date>();

                    for (int i = 4; i < 8; i++) {
                        cal = Calendar.getInstance();
                        cal.add(Calendar.DATE, i);
                        disabledDates.add(cal.getTime());
                    }

                    caldroidFragment.setDisableDates(disabledDates);
                    caldroidFragment.refreshView();

                } catch (ParseException e) { // Insert this block.
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)