2014-05-22 48 views
0

我已經能夠檢索某個點的所有數據,但我目前正在嘗試檢索日期範圍內的數據。我遇到指定範圍的問題。見下面的代碼。我認爲一切都很好,直到「dateRange.lowerEndpoint()= lowerDate;在這裏,我不確定我希望在得到這個理順任何幫助像你想範圍<Date>問題

public class GetDataAsync extends AsyncTask<String, Void, List> { 
List<Value> dataValues = null; 

@Override 
protected List doInBackground(String... point) { 

    // Adjust these variables accordingly 
    final EmailAddress EMAIL_ADDRESS = CommonFactory.createEmailAddress("[email protected]"); 
    final String ACCESS_KEY = "XXXX"; 
    final UrlContainer INSTANCE_URL = UrlContainer.getInstance("XXXX.appspot.com"); 

    Range<Date> dateRange = null; 
    Date lowerDate = new Date(1398297720); 
    Date upperDate = new Date(1395273970); 

    dateRange.lowerEndpoint() = lowerDate; // <---- I know this is wrong. Not sure of correct code. 
    dateRange.upperEndpoint() = upperDate; // <---- I know this is wrong. Not sure of correct code. 


    final Server SERVER = ServerFactory.getInstance(INSTANCE_URL); 
    String pointName[] = point; 

    PointHelper pointHelper = HelperFactory.getPointHelper(SERVER, EMAIL_ADDRESS, ACCESS_KEY); 
    boolean pointExists = pointHelper.pointExists(pointName[0]); 
    List<Value> recordedValues = null; 
    if (pointExists) { 
     ValueHelper valueHelper = HelperFactory.getValueHelper(SERVER, EMAIL_ADDRESS, ACCESS_KEY); 
     recordedValues = valueHelper.getSeries(pointName[0], dateRange); 
    } 
    return recordedValues; } 

@Override 
protected void onPostExecute(List result) { 
    dataValues = result; 
    Value currentValue; 
    Double currentDouble; 
    for (int i = 0; i < dataValues.size(); i++) { 
     Log.e("Log", String.valueOf(dataValues.get(i))); 
     Value mValue = dataValues.get(i); 
     Double mDouble = mValue.getDoubleValue(); 
     Date mDate = mValue.getTimestamp(); 
     Log.e("Double Value", String.valueOf(mDouble)); 
     Log.e("Timestamp", String.valueOf(mDate)); 
     currentValue = dataValues.get(0); 
     currentDouble = currentValue.getDoubleValue(); 
    } 
} } 

回答

2

在我看來:。

Range<Date> dateRange = Range.closed(lowerDate, upperDate); 

(假設你想同時得到較低的日期,幷包含在範圍上日期。)

而且,你說你知道dateRange.lowerEndpoint() = lowerDate;是錯誤的,但萬一它有助於我會解釋它有什麼問題:

  • 首先,初始化dateRangenull。你必須事先創建一個對象,然後才能對它做任何事情,所以即使可以調用方法來設置範圍上的下限和上限(或分配字段),如果你不這樣做,先創建對象。你會得到NullPointerException
  • 其次,lowerEndpoint()upperEndpoint()是方法。他們不是領域,你不能分配給他們。
  • 最後,Range不可變的類型。一旦創建了Range,就無法更改。您似乎試圖使用它,好像它是一個可變的類型,您首先創建一個無範圍的範圍,然後將其更改爲具有您想要的屬性。 Range要求在創建時預先指定所有內容。