title: Delphi Firemonkey Android getting call logs error
body: <p>Hello this is my code:</p>
  
  <pre><code>    function FetchCalls:string;
  var
    cursor: JCursor;
    uri: Jnet_Uri;
  CACHED_FORMATTED_NUMBER, CACHED_LOOKUP_URI, CACHED_MATCHED_NUMBER, CACHED_NAME,
  CACHED_NORMALIZED_NUMBER, CACHED_NUMBER_LABEL, CACHED_NUMBER_TYPE, CACHED_PHOTO_ID,
  CONTENT_ITEM_TYPE, CONTENT_TYPE, COUNTRY_ISO, DATA_USAGE, DATE, DEFAULT_SORT_ORDER, DURATION,
  EXTRA_CALL_TYPE_FILTER, FEATURES, IS_READ, LIMIT_PARAM_KEY, NEW, NUMBER, NUMBER_PRESENTATION,
  OFFSET_PARAM_KEY, PHONE_ACCOUNT_COMPONENT_NAME, PHONE_ACCOUNT_ID, TRANSCRIPTION, TYPEX, VOICEMAIL_URI : integer;
  
    msgunixtimestampms:int64;
  CACHED_FORMATTED_NUMBERx, CACHED_LOOKUP_URIx, CACHED_MATCHED_NUMBERx, CACHED_NAMEx,
  CACHED_NORMALIZED_NUMBERx, CACHED_NUMBER_LABELx, CACHED_NUMBER_TYPEx, CACHED_PHOTO_IDx,
  CONTENT_ITEM_TYPEx, CONTENT_TYPEx, COUNTRY_ISOx, DATA_USAGEx, DATEx, DEFAULT_SORT_ORDERx, DURATIONx,
  EXTRA_CALL_TYPE_FILTERx, FEATURESx, IS_READx, LIMIT_PARAM_KEYx, NEWx, NUMBERx, NUMBER_PRESENTATIONx,
  OFFSET_PARAM_KEYx, PHONE_ACCOUNT_COMPONENT_NAMEx, PHONE_ACCOUNT_IDx, TRANSCRIPTIONx, TYPEXx, VOICEMAIL_URIx : string;
  begin
    uri:=StrToJURI('content://call_log/calls');
    cursor := SharedActivity.getContentResolver.query(uri, nil, nil,nil,nil);
    CACHED_FORMATTED_NUMBER:=cursor.getColumnIndex(StringToJstring('CACHED_FORMATTED_NUMBER'));
    CACHED_LOOKUP_URI:=cursor.getColumnIndex(StringToJstring('CACHED_LOOKUP_URI'));
    CACHED_MATCHED_NUMBER:=cursor.getColumnIndex(StringToJstring('CACHED_MATCHED_NUMBER'));
    CACHED_NAME:=cursor.getColumnIndex(StringToJstring('CACHED_NAME'));
    CACHED_NORMALIZED_NUMBER:=cursor.getColumnIndex(StringToJstring('CACHED_NORMALIZED_NUMBER'));
    CACHED_NUMBER_LABEL:=cursor.getColumnIndex(StringToJstring('CACHED_NUMBER_LABEL'));
    CACHED_NUMBER_TYPE:=cursor.getColumnIndex(StringToJstring('CACHED_NUMBER_TYPE'));
    CACHED_PHOTO_ID:=cursor.getColumnIndex(StringToJstring('CACHED_PHOTO_ID'));
    CONTENT_ITEM_TYPE:=cursor.getColumnIndex(StringToJstring('CONTENT_ITEM_TYPE'));
    CONTENT_TYPE:=cursor.getColumnIndex(StringToJstring('CONTENT_TYPE'));
    COUNTRY_ISO:=cursor.getColumnIndex(StringToJstring('COUNTRY_ISO'));
    DATA_USAGE:=cursor.getColumnIndex(StringToJstring('DATA_USAGE'));
    DATE:=cursor.getColumnIndex(StringToJstring('DATE'));
    DEFAULT_SORT_ORDER:=cursor.getColumnIndex(StringToJstring('DEFAULT_SORT_ORDER'));
    DURATION:=cursor.getColumnIndex(StringToJstring('DURATION'));
    EXTRA_CALL_TYPE_FILTER:=cursor.getColumnIndex(StringToJstring('EXTRA_CALL_TYPE_FILTER'));
    FEATURES:=cursor.getColumnIndex(StringToJstring('FEATURES'));
    IS_READ:=cursor.getColumnIndex(StringToJstring('IS_READ'));
    LIMIT_PARAM_KEY:=cursor.getColumnIndex(StringToJstring('LIMIT_PARAM_KEY'));
    NEW:=cursor.getColumnIndex(StringToJstring('NEW'));
    NUMBER:=cursor.getColumnIndex(StringToJstring('NUMBER'));
    NUMBER_PRESENTATION:=cursor.getColumnIndex(StringToJstring('NUMBER_PRESENTATION'));
    OFFSET_PARAM_KEY:=cursor.getColumnIndex(StringToJstring('OFFSET_PARAM_KEY'));
    PHONE_ACCOUNT_COMPONENT_NAME:=cursor.getColumnIndex(StringToJstring('PHONE_ACCOUNT_COMPONENT_NAME'));
    PHONE_ACCOUNT_ID:=cursor.getColumnIndex(StringToJstring('PHONE_ACCOUNT_ID'));
    NUMBER_PRESENTATION:=cursor.getColumnIndex(StringToJstring('NUMBER_PRESENTATION'));
    TRANSCRIPTION:=cursor.getColumnIndex(StringToJstring('TRANSCRIPTION'));
    TYPEX:=cursor.getColumnIndex(StringToJstring('TYPE'));
   while (cursor.moveToNext) do begin
    CACHED_FORMATTED_NUMBERx:=JStringToString(cursor.getString(CACHED_FORMATTED_NUMBER));
    CACHED_LOOKUP_URIx:=JStringToString(cursor.getString(CACHED_LOOKUP_URI));
    CACHED_MATCHED_NUMBERx:=JStringToString(cursor.getString(CACHED_MATCHED_NUMBER));
    CACHED_NAMEx:=JStringToString(cursor.getString(CACHED_NAME));
    CACHED_NORMALIZED_NUMBERx:=JStringToString(cursor.getString(CACHED_NORMALIZED_NUMBER));
    CACHED_NUMBER_LABELx:=JStringToString(cursor.getString(CACHED_NUMBER_LABEL));
    CACHED_NUMBER_TYPEx:=JStringToString(cursor.getString(CACHED_NUMBER_TYPE));
    CACHED_PHOTO_IDx:=JStringToString(cursor.getString(CACHED_PHOTO_ID));
    CONTENT_ITEM_TYPEx:=JStringToString(cursor.getString(CONTENT_ITEM_TYPE));
    CONTENT_TYPEx:=JStringToString(cursor.getString(CONTENT_TYPE));
    COUNTRY_ISOx:=JStringToString(cursor.getString(COUNTRY_ISO));
    DATA_USAGEx:=JStringToString(cursor.getString(DATA_USAGE));
    DATEx:=JStringToString(cursor.getString(DATE));
    DEFAULT_SORT_ORDERx:=JStringToString(cursor.getString(DEFAULT_SORT_ORDER));
    DURATIONx:=JStringToString(cursor.getString(DURATION));
    EXTRA_CALL_TYPE_FILTERx:=JStringToString(cursor.getString(EXTRA_CALL_TYPE_FILTER));
    FEATURESx:=JStringToString(cursor.getString(FEATURES));
    IS_READx:=JStringToString(cursor.getString(IS_READ));
    LIMIT_PARAM_KEYx:=JStringToString(cursor.getString(LIMIT_PARAM_KEY));
    NEWx:=JStringToString(cursor.getString(NEW));
    NUMBERx:=JStringToString(cursor.getString(NUMBER));
    NUMBER_PRESENTATIONx:=JStringToString(cursor.getString(NUMBER_PRESENTATION));
    OFFSET_PARAM_KEYx:=JStringToString(cursor.getString(OFFSET_PARAM_KEY));
    PHONE_ACCOUNT_COMPONENT_NAMEx:=JStringToString(cursor.getString(PHONE_ACCOUNT_COMPONENT_NAME));
    PHONE_ACCOUNT_IDx:=JStringToString(cursor.getString(PHONE_ACCOUNT_ID));
    NUMBER_PRESENTATIONx:=JStringToString(cursor.getString(NUMBER_PRESENTATION));
    TRANSCRIPTIONx:=JStringToString(cursor.getString(TRANSCRIPTION));
    TYPEXx:=JStringToString(cursor.getString(TYPEX));
      Result:=TYPEXx+CACHED_NAMEx+NUMBERx;
      end;
  end;
  </code></pre>
  
  <p>and to use...
  here is the usage method</p>
  
  <p>Memo1.lines.add(FetchCalls);</p>
  
  <p>But when i try to use this function i got this error :</p>
  
  <p>"JAVA.LANG.LLLEGALSTATEEXCEPTION: COULDN'T READ ROW 0, COL -1 FROM CURSORWINDOW. MAKE SURE THE CURSOR IS INITIALIZED CORRECTLY BEFORE ACCESSING DATA FROM IT.</p>
  
  <p>ANY IDEAS HOW TO SOLVE THIS??</p>
  
  <p>thank you very much</p>