Je moet de regels die daaronder staan natuurlijk ook uitcommenten (die gebruik maken van bijvoorbeeld addressidx e.d.).
Tevens... waarom plaats je een screenshot en niet gewoon de source kopiëren en tussen tags plaatsen?
Heb je ook geprobeerd om te achterhalen op welke regel exact je de foutmelding krijgt?
(debuggen !!!!)
Ik heb er nu dit van gemaakt en krijg nog steeds de fout melding:Je moet de regels die daaronder staan natuurlijk ook uitcommenten (die gebruik maken van bijvoorbeeld addressidx e.d.).
Code:function FetchSms:string; var cursor: JCursor; uri: Jnet_Uri; address,person,msgdatesent,protocol,msgread,msgstatus,msgtype, msgreplypathpresent,subject,body, servicecenter,locked:string; msgunixtimestampms:int64; addressidx,personidx,msgdateidx,msgdatesentidx,protocolidx,msgreadidx, msgstatusidx,msgtypeidx,msgreplypathpresentidx,subjectidx,bodyidx, servicecenteridx,lockedidx:integer; begin //uri:=StrToJURI('content://sms/inbox'); uri:=StrToJURI('content://sms/all'); cursor := SharedActivity.getContentResolver.query(uri, nil, nil,nil,nil); //addressidx:=cursor.getColumnIndex(StringToJstring('address')); //personidx:=cursor.getColumnIndex(StringToJstring('person')); msgdateidx:=cursor.getColumnIndex(StringToJstring('date')); //msgdatesentidx:=cursor.getColumnIndex(StringToJstring('date_sent')); //protocolidx:=cursor.getColumnIndex(StringToJstring('protocol')); //msgreadidx:=cursor.getColumnIndex(StringToJstring('read')); //msgstatusidx:=cursor.getColumnIndex(StringToJstring('status')); //msgtypeidx:=cursor.getColumnIndex(StringToJstring('type')); //msgreplypathpresentidx:=cursor.getColumnIndex(StringToJstring('reply_path_present')); //subjectidx:=cursor.getColumnIndex(StringToJstring('subject')); bodyidx:=cursor.getColumnIndex(StringToJstring('body')); //servicecenteridx:=cursor.getColumnIndex(StringToJstring('service_center')); //lockedidx:=cursor.getColumnIndex(StringToJstring('locked')); while (cursor.moveToNext) do begin //address:=JStringToString(cursor.getString(addressidx)); //person:=JStringToString(cursor.getString(personidx)); msgunixtimestampms:=cursor.getLong(msgdateidx); //msgdatesent:=JStringToString(cursor.getString(msgdatesentidx)); //protocol:=JStringToString(cursor.getString(protocolidx)); //msgread:=JStringToString(cursor.getString(msgreadidx)); //msgstatus:=JStringToString(cursor.getString(msgstatusidx)); //msgtype:=JStringToString(cursor.getString(msgtypeidx)); //msgreplypathpresent:=JStringToString(cursor.getString(msgreplypathpresentidx)); //subject:=JStringToString(cursor.getString(subjectidx)); body:=JStringToString(cursor.getString(bodyidx)); //servicecenter:=JStringToString(cursor.getString(servicecenteridx)); //locked:=JStringToString(cursor.getString(lockedidx)); Result := Result + #13 + IntToStr(trunc(msgunixtimestampms / 1000)) + ' ' + address + ' ' + body; end; end;Bij dezeTevens... waarom plaats je een screenshot en niet gewoon de source kopiëren en tussen tags plaatsen?
Ik heb al eens een poging gedaan om te debuggen maar weet niet precies hoe ik dat moet doen.Heb je ook geprobeerd om te achterhalen op welke regel exact je de foutmelding krijgt?
(debuggen !!!!)
Ik compileer in de Debug mode, maar waar kan ik precies zien op welke regel het mis gaat ?
Ik krijg info als dit:
Module Load: linker. Has Debug Info. Base Address: $B6F63970. Process SMS.apk (23716)
Module Load: libc.so. Has Debug Info. Base Address: $B6EF6228. Process SMS.apk (23716)
Module Load: libm.so. No Debug Info. Base Address: $00000000. Process SMS.apk (23716)
Geen idee waarom dat bij mij niet werkt, het project wordt gecompileerd en op de GSM geinstalleed en de App start (en geeft de fout melding) in XE10.1 wordt de probleem regel niet weergegeven.Gebruik je F9 (run) want die is met debugging.
Dan zou ie gewoon moeten stoppen op de verkeerde regel.
Log zegt mij ook niets, dus een serie showmessages geplaatst.Anders moet je, zoals ik al eerder aangegeven heb, een paar log (of showmessages) regels toevoegen om te kijken tot waar die precies loopt.
De melding 1 is de laatste die weergegeven wordt, dus lijkt het fout te gaan in regel: msgdateidx:=cursor.getColumnIndex(StringToJstring( 'date'));Code:begin //uri:=StrToJURI('content://sms/inbox'); uri:=StrToJURI('content://sms/all'); showmessage('0'); cursor := SharedActivity.getContentResolver.query(uri, nil, nil,nil,nil); showmessage('1'); //addressidx:=cursor.getColumnIndex(StringToJstring('address')); //personidx:=cursor.getColumnIndex(StringToJstring('person')); msgdateidx:=cursor.getColumnIndex(StringToJstring('date')); showmessage('2');
cursor is nil na de cursor := regel.
Doe maar eens:
if cursor = nil then showmessage('cursor is nil');
onder die regel.
Waarom dat niet werkt weet ik niet.
Je kunt nog content://sms proberen.
Die werkt bij mij wel.
Maar ik heb ook geen idee waarom bij jou niet alle SMS'jes weergegeven worden.
cursor is nil wordt getoond, 2 niet.Code:begin //uri:=StrToJURI('content://sms/inbox'); uri:=StrToJURI('content://sms/all'); showmessage('0'); cursor := SharedActivity.getContentResolver.query(uri, nil, nil,nil,nil); if cursor = nil then showmessage('cursor is nil'); //addressidx:=cursor.getColumnIndex(StringToJstring('address')); //personidx:=cursor.getColumnIndex(StringToJstring('person')); msgdateidx:=cursor.getColumnIndex(StringToJstring('date')); showmessage('2'); //msgdatesentidx:=cursor.getColumnIndex(StringToJstring('date_sent')); //protocolidx:=cursor.getColumnIndex(StringToJstring('protocol')); //msgreadidx:=cursor.getColumnIndex(StringToJstring('read')); //msgstatusidx:=cursor.getColumnIndex(StringToJstring('status')); //msgtypeidx:=cursor.getColumnIndex(StringToJstring('type')); //msgreplypathpresentidx:=cursor.getColumnIndex(StringToJstring('reply_path_present')); //subjectidx:=cursor.getColumnIndex(StringToJstring('subject')); bodyidx:=cursor.getColumnIndex(StringToJstring('body')); showmessage('3');
uri:=StrToJURI('content://sms/all');
gewijzigd in
uri:=StrToJURI('content://sms');
Dit is een hele stap vooruit, het laatste SMSje wordt nu getoond, helaas loopt dan ook meteen de App muurvast...
Vreemd: Er wordt nu geen enkele showmessage getoond !
Edit:
Het lijkt erop dat nu juist de showmessages voor het probleem zorgen, want met de oude code en alleen regel
uri:=StrToJURI('content://sms/all');
gewijzigd in
uri:=StrToJURI('content://sms');
Lijkt het goed te werken....
Last edited by MMSoft; 08-Dec-17 at 17:02.
Ik probeer alleen de laatste SMS uit te lezen en denk dat ik daarvoor deze regel aan moet passen
Maar omdat ik nog niet precies weet hoe deze code werkt, en ik deze code niet wil verprutsen toch even de vraag hoe ik dit het beste kan doen ?Code:while (cursor.moveToNext) do
Gewoon wat dingen proberen.
Dat is ook programmeren.
Wat kun je verprutsen???
Je kunt toch altijd de oorspronkelijke code weer terugzetten?
Je wilt dus cursor.moveToNext doen tot de laatste en dan pas de properties uitlezen.
Ga je gang.
Zo wordt er alleen de laatste SMS getoond:
Iedereen die mee gedacht heeft bedankt !Code:servicecenteridx:=cursor.getColumnIndex(StringToJstring('service_center')); lockedidx:=cursor.getColumnIndex(StringToJstring('locked')); // while (cursor.moveToNext) do // begin cursor.moveToNext; address:=JStringToString(cursor.getString(addressidx)); person:=JStringToString(cursor.getString(personidx)); msgunixtimestampms:=cursor.getLong(msgdateidx); msgdatesent:=JStringToString(cursor.getString(msgdatesentidx)); protocol:=JStringToString(cursor.getString(protocolidx)); msgread:=JStringToString(cursor.getString(msgreadidx)); msgstatus:=JStringToString(cursor.getString(msgstatusidx)); msgtype:=JStringToString(cursor.getString(msgtypeidx)); msgreplypathpresent:=JStringToString(cursor.getString(msgreplypathpresentidx)); subject:=JStringToString(cursor.getString(subjectidx)); body:=JStringToString(cursor.getString(bodyidx)); servicecenter:=JStringToString(cursor.getString(servicecenteridx)); locked:=JStringToString(cursor.getString(lockedidx)); //Result := Result + #13 + IntToStr(trunc(msgunixtimestampms / 1000)) + ' ' + address + ' ' + body; Result := IntToStr(trunc(msgunixtimestampms / 1000)) + ' ' + address + ' ' + body; // end; end;
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks