2014-05-22 1 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;이 잘못된 것을 알고 말을하지만, 경우에 내가 설명 할 것이다 도움 무엇이 잘못 되었나요?

  • 먼저 dateRange에서 null으로 초기화하십시오. 무엇이든 할 수 있기 전에 실제로 객체를 만들어야합니다. 따라서 범위의 하위 끝점과 위 끝점을 설정하는 메서드를 호출 할 수 있다고해도 (또는 필드를 할당하는 경우에도) 먼저 객체를 만듭니다. NullPointerException이 표시됩니다.
  • 둘째, lowerEndpoint()upperEndpoint()이 방법입니다. 그들은 필드가 아니기 때문에 필드에 지정할 수 없습니다.
  • 마지막으로, Range불변의 유형입니다. Range이 생성되면 변경할 수 없습니다. 당신은 마치 가변형 타입 인 것처럼 사용하려고 시도하는 것으로 보입니다. 처음에는 무한 범위를 생성 한 다음 원하는 속성으로 변경합니다. Range을 만들 때는 모든 것을 앞에서 지정해야합니다.