2014-04-04 71 views
1

我有一个问题,与Jstring下Delphi-XE5 Android应用程序。其实,我尝试使用下面的句子来访问Android的Google日历:访问日历安卓与德尔福

projection: array[1..4] of string=('_id','account_name','calendar_display_name','owner_account'); 

    Uri  :=TJnet_Uri.JavaClass.parse(StringToJString('content://com.android.calendar/events')); 
    managedCursor := SharedActivity.getContentResolver.query(Uri, projection, nil, nil, nil); 

而问题是最后的查询必须接受投影为的jstring。

我一直在努力,以及:

projection: array[1..4] of JString= (StringToJString('_id'),StringToJString('account_name'),StringToJString('calendar_display_name'),StringToJString('owner_account')); 

但它返回我下面的错误:

[DCC Error] Unit5.pas(46): E2250 There is no overloaded version of 'query' that can be called with these arguments 

什么想法?

回答

2

query函数的投影参数必须为TJavaObjectArray<JString>,类似于JContentResolver类的查询方法的签名中所示。

function query(uri: Jnet_Uri; projection: TJavaObjectArray<JString>; selection: JString; selectionArgs: TJavaObjectArray<JString>; sortOrder: JString): JCursor; cdecl; overload; 
    function query(uri: Jnet_Uri; projection: TJavaObjectArray<JString>; selection: JString; selectionArgs: TJavaObjectArray<JString>; sortOrder: JString; cancellationSignal: JCancellationSignal): JCursor; cdecl; overload; 

所以,你可以在这条路上传递此参数

projection : TJavaObjectArray<JString>; 
begin 
    projection := TJavaObjectArray<JString>.Create(4); 
    projection.Items[0] := StringToJString('_id'); 
    projection.Items[1] := StringToJString('account_name'); 
    projection.Items[2] := StringToJString('calendar_display_name'); 
    projection.Items[3] := StringToJString('owner_account'); 

    Uri  :=TJnet_Uri.JavaClass.parse(StringToJString('content://com.android.calendar/events')); 
    SharedActivity.getContentResolver.query(Uri, projection, nil, nil, nil); 
+0

感谢您的帮助 – user2210837