Android 帐户同步给我一个未找到类的错误...但它不应该
我只是复制了 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的 AndroidManifest.xml 声明
您的 AuthenticatorService.java 位于 com.test.sync 包中并实现 AuthenticationService,因此它位于 com.test.sync.AuthenticationService 中。
您应该从清单中删除 .authenticator。
Your AndroidManifest.xml declares
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.