开发者

Android Account Sync giving me a class not found error... but it shouldn't

开发者 https://www.devze.com 2023-02-16 07:11 出处:网络
I simply copied the code used in the sample sync app provided by Android (found here). So it should work... but when I install it onto my phone I get the following error printed:

I simply copied the code used in the sample sync app provided by Android (found here).

So it should work... but when I install it onto my phone I get the following error printed:

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

It says the AuthenticatorService class is not found in my package... I have an AuthenticatorService class which extends 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();
        }


}

And here is the Manifest:

<?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>

Straight from the sample code. Does anyone have experience with getting accounts to work? I can provide more code if necessary, but it's simply just rewritten line by line from the sample code provided by Android. The device running this is on 2.1. Thanks!


Your AndroidManifest.xml declares

android:name=".authenticator.AuthenticationService"

Your AuthenticatorService.java is in the com.test.sync package and implements AuthenticationService, so it's in com.test.sync.AuthenticationService.

You should remove .authenticator from your manifest.

0

精彩评论

暂无评论...
验证码 换一张
取 消