Синхронизация учетной записи Android с сообщением об ошибке «класс не найден» ... но не должна - PullRequest
2 голосов
/ 11 марта 2011

Я просто скопировал код, использованный в примере приложения синхронизации, предоставляемого Android (найдено здесь ).

Так что это должно работать ... но когда я устанавливаю его на свой телефон, янапечатать следующую ошибку:

03-10 14:44:54.364: ERROR/AndroidRuntime(9459): Uncaught handler: thread main exiting due to uncaught exception
03-10 14:44:54.374: ERROR/AndroidRuntime(9459): java.lang.RuntimeException: Unable to instantiate service com.test.sync.authenticator.AuthenticationService: java.lang.ClassNotFoundException: com.test.sync.authenticator.AuthenticationService in loader dalvik.system.PathClassLoader@47b2b1a8
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:2764)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at android.app.ActivityThread.access$3200(ActivityThread.java:119)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1917)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at android.os.Looper.loop(Looper.java:123)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at android.app.ActivityThread.main(ActivityThread.java:4363)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at java.lang.reflect.Method.invokeNative(Native Method)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at java.lang.reflect.Method.invoke(Method.java:521)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at dalvik.system.NativeStart.main(Native Method)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459): Caused by: java.lang.ClassNotFoundException: com.test.sync.authenticator.AuthenticationService in loader dalvik.system.PathClassLoader@47b2b1a8
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:2761)
03-10 14:44:54.374: ERROR/AndroidRuntime(9459):     ... 10 more

Он говорит, что класс AuthenticatorService не найден в моем пакете ... У меня есть класс AuthenticatorService, который расширяет Service:

package com.test.sync;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class AuthenticationService extends Service {

        private Authenticator mAuthenticator;

        @Override
        public void onCreate() {
            mAuthenticator = new Authenticator(this);
        }       

        @Override
        public IBinder onBind(Intent arg0) {
            return mAuthenticator.getIBinder();
        }


}

И вотМанифест:

<?xml version="1.0" encoding="utf-8"?>
<!--
/**
 * Copyright (c) 2010, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-->
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.sync"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-permission
        android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission
        android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission
        android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission
        android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    <uses-permission
        android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission
        android:name="android.permission.WRITE_SECURE_SETTINGS" />
    <uses-permission
        android:name="android.permission.READ_CONTACTS" />
    <uses-permission
        android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission
        android:name="android.permission.READ_SYNC_STATS" />
    <uses-permission
        android:name="android.permission.READ_SYNC_SETTINGS" />
    <uses-permission
        android:name="android.permission.WRITE_SYNC_SETTINGS" />

    <uses-sdk android:minSdkVersion="5" />

    <application
        android:icon="@drawable/icon"
        android:label="@string/label">
        <!-- The authenticator service -->
        <service
            android:name=".authenticator.AuthenticationService"
            android:exported="true">
            <intent-filter>
                <action
                    android:name="android.accounts.AccountAuthenticator" />
            </intent-filter>
            <meta-data
                android:name="android.accounts.AccountAuthenticator"
                android:resource="@xml/authenticator" />
        </service>
        <service
            android:name=".syncadapter.SyncService"
            android:exported="true">
            <intent-filter>
                <action
                    android:name="android.content.SyncAdapter" />
            </intent-filter>
            <meta-data
                android:name="android.content.SyncAdapter"
                android:resource="@xml/syncadapter" />
            <meta-data
                android:name="android.provider.CONTACTS_STRUCTURE"
                android:resource="@xml/contacts" />
        </service>
        <activity
            android:name=".authenticator.AuthenticatorActivity"
            android:label="@string/ui_activity_title"
            android:theme="@android:style/Theme.Dialog"
            android:excludeFromRecents="true"
            >
            <!--
                No intent-filter here! This activity is only ever launched by
                someone who explicitly knows the class name
            -->
        </activity>
    </application>
</manifest>

Прямо из примера кода.У кого-нибудь есть опыт с получением аккаунтов на работу?При необходимости я могу предоставить больше кода, но он просто переписывается строка за строкой из примера кода, предоставленного Android.Устройство работает на 2.1.Спасибо!

1 Ответ

2 голосов
/ 11 марта 2011

Ваш AndroidManifest.xml объявляет

android:name=".authenticator.AuthenticationService"

Ваш AuthenticatorService.java находится в пакете com.test.sync и реализует AuthenticationService, поэтому находится в com.test.sync.AuthenticationService.

Вы должны удалить .authenticator из вашего манифеста.

...