Многомерные массивы с ключом дня - PullRequest
0 голосов
/ 08 января 2012
public void buildArrayForMonth(int month, int year, int numOfDays, JSONArray array){
    JSONObject[][] monthArray = null;

    SimpleDateFormat monthFormat = new SimpleDateFormat("M");
    SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");
    SimpleDateFormat dateFormat = new SimpleDateFormat("d");

    for(int i=0;i<array.length();i++){

        try {
            JSONObject event = array.getJSONObject(i);
            String date_full = event.getString("date_full");

            Date date = new Date(HttpDateParser.parse(date_full));
            int theMonth = Integer.parseInt(monthFormat.format(date)) - 1;
            int theYear = Integer.parseInt(yearFormat.format(date));
            int theDate = Integer.parseInt(dateFormat.format(date));

            if(theMonth == month && theYear == year){
                System.out.println("This Month" + date_full);
                monthArray[theDate][monthArray[theDate].length] = event; //add event object to the month array and its respective date

            }


        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }



}

Я хочу, чтобы дата была массивом, содержащим JSONObjects. Мое приложение падает с тем, что у меня сейчас. Я не уверен, что ты способен сделать это. Есть ли в Java что-то вроде push или add?

Ответы [ 2 ]

1 голос
/ 08 января 2012

Вы забыли создать массив перед инициализацией (я думаю, что вы получаете NullPointerException в вашем примере кода):

monthArray = new JSONObject[32][32];

Также, возможно, HashMap будет более полезен для этой задачи.

UPD Ops, и один вопрос, зачем вам двумерный массив? Я думаю, что одного измерения достаточно.

JSONObject monthArray = new JSONObject[32];
monthArray[theDate] = event

UPD2 И я рекомендую использовать Календарь вместо Date и SimpleDateFormat. Это более правильный путь, например:

Calendar c = Calendar.getCalendar();
c.setTimeInMillis(HttpDateParser.parse(date_full));
int theMonth = c.get(Calendar.MONTH);
int theYear = c.get(Calendar.YEAR);
int theDate = c.get(Calendar.DAY_OF_MONTH);

UPD3

Обновление после комментариев. Если за один день может произойти более одного события, вы должны использовать HashMap со списком, как я предлагал.

HashMap<Integer, List<JSONObject>> monthArray = new HashMap<Integer, List>();
...
if (...) {
    ...
    List l = monthArray.get(theDate);
    if (l == null) {
        l = new LinkedList<JSONObject>();
    }

    l.add(event);

    monthArray.put(theDate, l);
}
0 голосов
/ 08 января 2012

Немного безумно использовать Date в качестве индекса массива.Вместо этого используйте HashMap<Date, JSONObject>.

Если вы хотите, чтобы одна Дата была связана с несколькими объектами JSONObject, то, возможно, вы захотите использовать Карту, которая содержит Список: HashMap<Date, List<JSONObject>>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...