- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为我的应用构建了一个 SyncAdapter
,以便我可以使用 Google Cloud Messaging 触发数据库与服务器的同步。我实际上使用 Volley 进行网络调用并同步数据,但从我读到的内容来看,当想要同步您的应用程序时,您应该有一个 SyncAdapter
我的问题是 onPerformSync()
并不总是运行。我将触发 GCM,并且总是会收到一条日志,表明它已正确通过 GCM,但我的 onPerformSync()
日志并不总是触发。因为有时我会想象它设置正确。但我无法弄清楚当它不发生时会发生什么
onPerformSync()
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
Log.d("onPerformSync", "got to the sync");
}
GCM 消息处理程序中的 onMessageReceived()
@Override
public void onMessageReceived(String from, Bundle data) {
if (from.equals("/topics/global")) {
Log.d("gcm topics", data.getString("message"));
try {
if (data.getString("message").equals("update")) {
Log.d("is update", "is message update");
Account newAccount = new Account(ACCOUNT, ACCOUNT_TYPE);
ContentResolver.requestSync(newAccount, AUTHORITY, data);
}
} catch (NullPointerException e) {
Log.e("GCM", e.toString());
}
} else {
String message = data.getString("message");
createNotification(from, message);
}
}
在MainActivity中创建帐户
public static Account createSyncAccount(Context context) {
// Create the account type and default account
Account newAccount = new Account(
ACCOUNT, ACCOUNT_TYPE);
// Get an instance of the Android account manager
AccountManager accountManager =
(AccountManager) context.getSystemService(
ACCOUNT_SERVICE);
/*
* Add the account and account type, no password or user data
* If successful, return the Account object, otherwise report an error.
*/
if (accountManager.addAccountExplicitly(newAccount, null, null)) {
/*
* If you don't set android:syncable="true" in
* in your <provider> element in the manifest,
* then call context.setIsSyncable(account, AUTHORITY, 1)
* here.
*/
ContentResolver.setIsSyncable(newAccount, ArmyContract.CONTENT_AUTHORITY, 1);
ContentResolver.setSyncAutomatically(newAccount, ArmyContract.CONTENT_AUTHORITY, true);
return newAccount;
} else {
/*
* The account exists or some other error occurred. Log this, report it,
* or handle it internally.
*/
Log.e("Account Creation", "Error withou dummy accocunt");
return null;
}
}
syncadapter.xml
<?xml version="1.0" encoding="utf-8"?>
<sync-adapter
xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="com.clashtoolkit.clashtoolkit"
android:accountType="clashtoolkit.com"
android:userVisible="false"
android:supportsUploading="false"
android:allowParallelSyncs="false"
android:isAlwaysSyncable="true"/>
validator .xml
<?xml version="1.0" encoding="utf-8"?>
<account-authenticator
xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="clashtoolkit.com"
android:icon="@mipmap/ic_launcher"
android:smallIcon="@mipmap/ic_launcher"
android:label="@string/app_name"/>
AndroidManifext.xml
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="com.clashtoolkit.clashtoolkit.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.clashtoolkit.clashtoolkit.permission.C2D_MESSAGE" />
<service
android:name="com.clashtoolkit.clashtoolkit.network.AuthenticatorService">
<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="com.clashtoolkit.clashtoolkit.network.SyncService"
android:exported="true"
android:process=":sync">
<intent-filter>
<action android:name="android.content.SyncAdapter"/>
</intent-filter>
<meta-data android:name="android.content.SyncAdapter"
android:resource="@xml/syncadapter" />
</service>
最佳答案
问题可能在于将这些键添加到 bundle 数据中:
// Disable sync backoff and ignore sync preferences. In other words...perform sync NOW!
data.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
data.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
ContentResolver.requestSync(newAccount, AUTHORITY, data);
关于java - SyncAdapter onPerformSync 并不总是被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34456860/
我在 AbstractThreadedSyncAdapter 的 onPerformSync 方法中进行网络操作。我想知道当我的应用程序在前台、后台和死机中运行时,这些操作是否默认在单独的线程上运行。
我的应用程序有一个按照 Android developer site 显示的结构创建的同步适配器. onPerformSync() 方法从互联网获取数据并使用批量插入将其插入数据库: Vector c
我为我的应用构建了一个 SyncAdapter,以便我可以使用 Google Cloud Messaging 触发数据库与服务器的同步。我实际上使用 Volley 进行网络调用并同步数据,但从我读到的
我正在使用 AbstractThreadedSyncAdapter 将我的 Android 手机中的一些数据与服务器同步。当用户使用手机的应用程序登录时,我会执行第一次同步,以便用户在开始使用我的
我有一个 SyncAdapter 类,它连接到 MQTT 代理并为服务器发布负载以接收负载。但是,似乎即使调用了 onPerformSync() 方法,也无法访问互联网。我认为使用 SyncAdapt
除了一件事,我的 syncadapter 运行良好。用户安装应用程序后,我的应用程序会同步两次。稍后,如果我在“设置”中手动同步它,它只会按预期同步一次。这只是发生这种情况的应用程序的第一次运行。 这
我关注这个标题Why does ContentResolver.requestSync not trigger a sync?但同步方法不会出现在设置屏幕的帐户和同步中。我认为 onPerformSy
正在尝试为我的内容提供者设置一个同步适配器/服务。内容提供者工作正常,能够毫无问题地存储数据。 我有一个向我的内容解析器注册的内容观察器,并且在数据更改后调用 onChange 方法。 但是,在我调用
我正在尝试实现同步适配器,我已经关注了This guide. 但是 onPerformSync() 在 ContentResolver.requestSync() 调用之后没有被触发。 我也尝试了一些
我正在创建一个 Android 应用程序,它向用户提供一个按钮来刷新数据库,以便本地数据和服务器上的数据保持同步。 我已经创建了帐户验证器、内容提供器并通过服务绑定(bind)了它们。 Content
我已经使用 Android 设置了一个 SyncAdapter sample project 、Steele 的两部分教程(1 和 2)和 Google I/O 2010 关于 REST 应用程序的演
当我将联系人添加到我的电话簿时,同步适配器的 onPerformSync() 方法被触发。但我无法弄清楚如何在该方法中检索新添加的联系方式。请帮助我提供一些指导和代码 fragment 。感谢您的帮助
我正在通过 SyncAdapter onPerformSync 发送几个改造调用,并且我试图通过通过 try/catch sleep 语句发送出去来调节 http 调用。但是,这会阻塞 UI,并且只有
你们能不能帮我一下。我一直在尝试在 onPerformSyn 中运行 yelp api。我怎么可能这样做。?我收到以下错误。 “没有空的构造函数”我正在使用这个 post尝试创建构造函数,但它对我不起
我使用 SyncAdapter 将我的数据与服务器同步。一切正常,但我很难向 SyncAdapter 发送额外内容。 在我的 ContentObserver 中,我使用以下代码向 SyncAdapte
我收到了大量来自用户的错误报告,这些错误报告来自强制关闭对话框,内容如下: java.lang.ExceptionInInitializerError at com.MyRequest.execute
我正在尝试使用 AbstractThreadedSyncAdapter 将我的本地数据库与我的服务器同步。我已经按照找到的指南进行操作,但无法正常工作。适用于 Android 2.2。 我的身份验证器
我是一名优秀的程序员,十分优秀!