簡體   English   中英

Delphi Firemonkey Android獲取通話記錄錯誤

[英]Delphi Firemonkey Android getting call logs error

您好,這是我的代碼:

    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;

並使用...這是使用方法

Memo1.lines.add(FetchCalls);

但是當我嘗試使用此功能時,出現此錯誤:

“ JAVA.LANG.LLLEGALSTATEEXCEPTION:可能無法從Cursowindow讀取行0,COL -1。確保在從它那里獲取數據之前正確地初始化了光標。

任何想法如何解決這個問題?

非常感謝你

我解決了你的問題。 我過去用來復制並修復與您相同的確切錯誤的代碼確實非常好。 首先包括

Androidapi.JNI.Provider, FMX.Helpers.Android

根據您的delphi版本。 我使用的是Delphi 10.1 Berlin。

第二全部替換

cursor.getColumnIndex(StringToJstring('XXXX'));  

cursor.getColumnIndex( TJCallLog_Calls.JavaClass.XXXX );

以CACHED_NAME為例,它將是

  CACHED_NAME:=cursor.getColumnIndex( TJCallLog_Calls.JavaClass.CACHED_NAME );   

編譯完所有內容后,一切正常。 我將為您提供的另一條建議是注釋或刪除正在獲取但不使用的數據。 在代碼末尾,您僅返回TYPE,CACHED_NAME和NUMER。 從其他字段獲取數據的所有其他調用都是不必要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM