2012-07-31 23 views
3

我正在使用Google Tasks API返回值,例如任務標題,任務註釋和任務截止日期。隱藏從Google Tasks API返回的Android中的RFC 3339 DateTime對象字符串

當我嘗試輸出截止日期(stored as RFC 3339)作爲字符串時,我得到java.lang.IllegalArgumentException

我想用SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")來做這個轉換。

我的猜測是,SimpleDateFormat是不是要走的路,但我嘗試過的每一個轉換失敗。我願意使用Joda ISODateFormat,但即使這樣也行不通。我已經包含了相關的代碼片段。

我的任務(呼叫項目)類的定義是:

import com.google.api.client.util.DateTime; 

public class Item { 

Long id; 
String title; 
String description; 
String extId1; 
Integer status; 
DateTime dateDue; 
DateTime dateLastEdit; 
DateTime dateCompleted; 

Item parent; 

public Long getId() { 
    return id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getDescription() { 
    return description; 
} 

public void setNotes(String description) { 
    this.description = description; 
} 

public String getExtId1() { 
    return extId1; 
} 

public void setExtId1(String extId1) { 
    this.extId1 = extId1; 
} 

public Integer getStatus() { 
    return status; 
} 

public void setStatus(Integer status) { 
    this.status = status; 
} 

public DateTime getDateDue() { 
    return dateDue; 
} 

public void setDateDue(DateTime dateDue) { 
    this.dateDue = dateDue; 
} 

public DateTime getDateLastEdit() { 
    return dateLastEdit; 
} 

public void setDateLastEdit(DateTime dateLastEdit) { 
    this.dateLastEdit = dateLastEdit; 
} 

public DateTime getDateCompleted() { 
    return dateCompleted; 
} 

public void setDateCompleted(DateTime dateCompleted) { 
    this.dateCompleted = dateCompleted; 
} 

public Item getParent() { 
    return parent; 
} 

public void setParent(Item parent) { 
    this.parent = parent; 
} 

} 

看到這個出問題我演示doInBackground方法,我嘗試輸出返回的日期:

@Override 
protected List<Item> doInBackground(Void... arg0) { 
    List<Item> itemList = new ArrayList<Item>(); 
    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
    Log.v(TAG, "Start doInBackground..."); 
    try { 
     List<String> result = new ArrayList<String>(); 
     com.google.api.services.tasks.Tasks.TasksOperations.List listRequest = service.tasks().list("@default"); 
     listRequest.setFields("items/title,items/notes,items/due"); 
     List<Task> tasks = listRequest.execute().getItems(); 
     if (tasks != null) {    
      for (Task task : tasks) { 
       result.add(task.getTitle()); 
       Item item = new Item();    
       item.setTitle(task.getTitle()); 
       item.setNotes(task.getNotes()); 
       DateTime due = task.getDue(); 
       item.setDateDue(due); 
       Log.v(TAG, "Due date string: " + formatter.format(due)); 
       itemList.add(item); 
      } 
     } else { 
      Log.v(TAG, "End doInBackground with no tasks"); 
      result.add("No tasks."); 
     }  
     Log.v(TAG, "End doInBackground with tasks received"); 
     return itemList;   
    } catch (IOException e) { 
     Log.v(TAG, "End doInBackground with IOException..."); 
     tasksSample.handleGoogleException(e); 
     Item item = new Item(); 
     item.setTitle(e.getMessage()); 
     itemList.add(item); 
     return itemList; 
     //return Collections.singletonList(e.getMessage()); 
    } catch (Exception e2) { 
     Log.v(TAG, "End doInBackground with generic exception..."); 
     e2.printStackTrace(); 
     Item item = new Item(); 
     item.setTitle(e2.getMessage()); 
     itemList.add(item); 
     return itemList; 
    } finally { 
     tasksSample.onRequestCompleted(); 
    } 
} 

編輯:

根據要求,這是一個堆棧跟蹤:

[java.text.DateFormat.format(DateFormat.java:365),java.text.Format.format(Format.java:93),com.google.api.services.samples.tasks.android.AsyncLoadTasks.doInBackground (AsyncLoadTasks.java:78),com.google.api.services.samples.tasks.android.AsyncLoadTasks.doInBackground(AsyncLoadTasks.java:1),android.os.AsyncTask $ 2.call(AsyncTask.java:264),java .util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305),java.util.concurrent.FutureTask.run(FutureTask.java:137),android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java: (ThreadPoolExecutor.java:569),java.lang.Thread.run(Thread.java) :856)]

以下是任務資源:

{ 「由於」: 「2012-07-04T00:00:00.000Z」, 「注意事項」: 「注1」, 「稱號」: 「測試1」}

+2

您可以請,1)發佈錯誤的完整堆棧跟蹤。 2)提供從谷歌任務收到的​​資源數據,以便我們可以匹配它從你的日期模式? – 2012-07-31 12:07:59

+0

謝謝,我現在嘗試添加兩個。我不熟悉Eclipse,我從調試窗口中的「變量」選項卡中獲取了值。請糾正我,如果不是這樣做的話。 – 2012-07-31 12:23:51

+0

你的評論讓我想起了這個問題,然後當我看到任務資源(複製/粘貼)時,我注意到了明文。看起來Java客戶端庫幫助類已經以字符串格式輸出日期!所以需要轉換任何東西。奇怪的! – 2012-07-31 12:37:09

回答

1

看來, Google Java客戶端庫輔助函數import com.google.api.client.util.DateTime;

已經返回一個文本字符串,不需要做轉換。那不是我期待的!