Android 帐户同步给我一个未找到类的错误...但它不应该

发布于 2024-10-21 22:41:35 字数 6981 浏览 6 评论 0原文

我只是复制了 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 类:

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。谢谢!

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!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

嘿看小鸭子会跑 2024-10-28 22:41:35

您的 AndroidManifest.xml 声明

android:name=".authenticator.AuthenticationService"

您的 AuthenticatorService.java 位于 com.test.sync 包中并实现 AuthenticationService,因此它位于 com.test.sync.AuthenticationService 中。

您应该从清单中删除 .authenticator。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文