0

すべてのユーザーの連絡先を取得する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バックグラウンドスレッドでカーソルを実行できるように、適切に実装する方法を知っている人はいますか?

ありがとうございました!

4

0 に答える 0