小编jcw*_*ger的帖子

如何使用Android SyncAdapter?

我尝试了解Android同步逻辑.我不明白的是syncadapter.xmlAndroid SDK示例项目中包含的文件SampleSyncAdapter.如果您下载了SDK示例,则它应位于以下文件夹中:

SDK/android-sdk-PLATFORM/samples/android-VERSION/SampleSyncAdapter/res/xml/syncadapter.xml
Run Code Online (Sandbox Code Playgroud)

我读过,内容提供者的权限应该是字符串或对资源的引用.内容权限到底是什么com.android.contacts?以下是文件的内容(没有许可证信息和注释,API级别16).

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="com.android.contacts"
    android:accountType="com.example.android.samplesync"
    android:supportsUploading="false"
    android:userVisible="true"
/>
Run Code Online (Sandbox Code Playgroud)

android android-contentprovider android-syncadapter

51
推荐指数
2
解决办法
5万
查看次数

在Android ContentProvider中从网络同步时防止网络同步循环

我正在编写自己的ContentProvider,它将使用SyncAdapter同步到Web服务.

当同步适配器正在修改内容提供程序的数据时,问题发生在内部调用getContentResolver().notifyChange导致同步循环时,提供程序触发网络同步.

客户端应用程序执行修改时需要带有网络同步标志的notifyChange,但在同步适配器修改时应避免使用.

如何在内容提供者内部轻松判断客户端应用程序(应该在修改时触发网络同步)或同步适配器(不应触发网络同步)使用它.

目前我正在使用不同的CONTENT_URI(同步适配器使用CONTENT_URI_NO_SYNC访问数据,使用CONTENT_URI访问客户端应用程序)以便能够区分这两种类型的访问并相应地设置网络同步标志.

java android android-contentprovider android-syncadapter

14
推荐指数
1
解决办法
2826
查看次数

我可以在operator =中使用placement new(this)吗?

背景: 我有一个复杂的类,有很多变量.我有一个声音和测试的复制构造函数:

Applepie::Applepie( const Applepie &copy) :
m_crust(copy.m_crust),
m_filling(copy.m_filling)
{
}
Run Code Online (Sandbox Code Playgroud)

在初始化列表中调用的一些成员变量复制构造函数执行分配.

问题: 我需要创建operator=.我可以简单地执行以下操作,而不是使用赋值而不是初始化列表复制现有的构造函数,释放正在被替换的内存等等,

Applepie& Applepie::operator=( const Applepie &copy)
{
    if( this != &copy)
    {
       this->~Applepie(); // release own object
       new(this) Applepie(copy); // placement new copy constructor
    }
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

换句话说,是毁灭自我后跟一个放置新的复制构造函数在语义上与operator =?

这似乎有可能大大减少重复代码并确认每个变量都已正确初始化,但代价是在分配期间可能会略微降低效率.我错过了一些更加模糊的东西吗?

理由: 我的实际班级有大约30个变量.我担心我的复制构造函数和我的赋值操作符都必须复制所有三十个,并且代码可能会发散,导致两个操作以不同的方式执行操作.

c++ operator-overloading placement-new

9
推荐指数
1
解决办法
2165
查看次数

处理登录并使用AccountManager记住我

我在我的应用程序中集成了android的帐户管理,我可以从Accounts & Sync设置中管理帐户.

我希望有一个经典的登录活动,可以在成功登录时将用户转发到他的家庭活动,并可以选择记住用户的密码.但是,AccountAuthenticatorActivity必须将其结果返回到AccountManager凭据和其余帐户信息,调用显式finish()并返回意图.

如何在AccountManager不进行finish()登录活动的情况下提供所需的信息?

android accountmanager

8
推荐指数
2
解决办法
9047
查看次数

屏幕方向更改时未调用加载程序

使用时AsyncTaskLoader屏幕方向发生变化,我遇到了一些麻烦.让我给你一些关于我的应用程序结构的背景:我有一个非常简单的应用程序,它从一个URL获取结果并显示它.该应用程序由一个FragmentActivity和三个组成Fragments.我的三个片段如下:

  • 第一个片段是一个edittext和一个提交输入的按钮.
  • 第二个片段显示了加载微调器
  • 第三个片段在获取数据时替换加载片段以显示结果.

AsyncTaskLoader被用于从任一个内容提供者加载数据(如果它是高速缓存),或从网络上.

一切都很好,直到屏幕上的变化!我查看了输出,LoaderManager.enableDebugLogging(true) 似乎问题的根源是LoaderCallbacks.onLoadFinished在我的活动中没有被调用.

这是启动加载器的一段代码:

/* This function is defined in the "first" fragment in an interface and
 * implemented in the activity */ 
@Override
public void onFormSubmission(String word) {                     

    showLoadingFragment();

    if ( mWord == null || mWord.equals(word) ) {
        getSupportLoaderManager().initLoader(0, word, this);
    } else {
        getSupportLoaderManager().restartLoader(0, word, this);
    }

    // Store the word
    mWord = word;
}
Run Code Online (Sandbox Code Playgroud)

显示结果的代码:

@Override
public void onLoadFinished(Loader<Bundle> loader, Bundle data) …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask

8
推荐指数
1
解决办法
1390
查看次数

ContentResolver如何找到相应的ContentProvider?

这是一个很神奇的问题.我理解对ContentResolver方法的调用需要一个特定于ContentProvider的URI,但android如何实际建立关联?

我猜测任何与AndroidManifest.xml中的ContentProvider提供的权限相匹配的URI都会涉及到.请求是否发送到包含该权限的每个提供商?如果我尝试创建其权限前缀为另一个权限的提供程序将是一个问题?

有没有办法看看ContentProvider是否正在运行?我想也许getType()方法的虚拟响应可能表示活跃.

android android-contentresolver android-contentprovider

2
推荐指数
1
解决办法
2588
查看次数