范围<日期>问题</date>

时间:2014-05-22 18:40:54

标签: java android guava

我已成功检索到某个点的所有数据,但我目前正在尝试在日期范围之间检索数据。我在指定范围时遇到问题。见下面的代码。我认为一切都很好,直到&#34; dateRange.lowerEndpoint()= lowerDate;这是我不确定的地方。我很感激任何有助于理顺这一点的人。

    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("XXXX@gmail.com");
   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();
    }
} }

1 个答案:

答案 0 :(得分:2)

在我看来,你想要:

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

(假设您确实希望范围内包括较低日期和较高日期。)

另外,你说你知道dateRange.lowerEndpoint() = lowerDate;是错误的,但如果有帮助我会解释它有什么问题:

  • 首先,您将dateRange初始化为null。您必须先实际创建一个对象,然后才能对其执行任何操作,因此即使可以调用方法来设置范围上的下端点和上端点(或指定字段),如果您不这样做,也无法执行此操作。首先创建对象。你会得到NullPointerException
  • 其次,lowerEndpoint()upperEndpoint()是方法。它们不是字段,您无法分配它们。
  • 最后,Range不可变的类型。创建Range后,无法更改。您似乎正在尝试使用它,就好像它是可变类型,您首先创建一个无范围的范围,然后将其更改为具有所需的属性。 Range要求在创建时预先指定所有内容。