すべてのユーザーの連絡先を取得するNativeScriptアプリ用の angular 2 サービスを作成しています。私の現在の実装では、 nativescript-contactsで使用されているような同期getContentResolver
メソッドを使用しています。は7k を超えるカーソルを報告し、アプリを合計 3 秒間フリーズします。ダメ。cursor.getCount
私はこのガイドに従っていて、using-loaders-in-android を使用していますが、これまでのところ運がありません。
これが私がこれまでに持っているものです:
declare let android: any
declare let java: any
import * as application from "application"
import {Injectable} from "@angular/core"
@Injectable()
export class ContactsService
extends android.support.v4.app.LoaderManager
implements android.support.v4.app.LoaderManager.LoaderCallbacks {
private contactsLoader: any = new android.support.v4.app.LoaderManager.LoaderCallbacks(
class extends android.support.v4.app.LoaderManager.LoaderCallbacks {
onCreateLoader(id, args) {
let projection: Array<string> = [
android.provider.ContactsContract.RawContactsColumns.CONTACT_ID,
android.provider.ContactsContract.ContactsColumns.DISPLAY_NAME,
android.provider.ContactsContract.ContactsColumns.HAS_PHONE_NUMBER,
android.provider.ContactsContract.ContactsColumns.LOOKUP_KEY,
android.provider.ContactsContract.ContactsColumns.PHOTO_URI,
android.provider.ContactsContract.CommonDataKinds.Phone.NUMBER,
android.provider.ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER,
android.provider.ContactsContract.CommonDataKinds.Phone.TYPE,
android.provider.ContactsContract.DataColumns.MIMETYPE,
]
return new android.support.v4.content.CursorLoader(
application.android.foregroundActivity,
android.provider.ContactsContract.Data.CONTENT_URI,
'data2 IS 2',
null,
null
).loadInBackground()
}
onLoadFinished(param0: android.support.v4.content.Loader, param1: java.lang.Object): void {
global.tnsconsole.dump('onLoadFinished > param0', param0)
global.tnsconsole.dump('onLoadFinished > param1', param1)
}
onLoaderReset(param0: android.support.v4.content.Loader): void {
global.tnsconsole.dump('onLoaderReset > param0', param0)
}
}
)
getContactsAsync(): Promise<any> {
// since the initLoader method is part of android.support.v4.app.LoaderManager
this.initLoader(1, null, this)
// but i get this error :(
// EXCEPTION: Error: Cannot convert object to Landroid/support/v4/app/LoaderManager$LoaderCallbacks; at index 2
return Promise.resolve([])
}
}
LoaderManager.LoaderCallbacks
バックグラウンドスレッドでカーソルを実行できるように、適切に実装する方法を知っている人はいますか?
ありがとうございました!