- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序将 3 个 ContentProvider 数据源组合到一个 UI 中。我想确保所有内容都正确布置,因此我尝试为模拟内容提供者提供预定义数据(稍后截取该数据的屏幕截图,但这是第 2 步)。
项目结构是:
/app
/app/homeapp
/app/sourceapp
我的主要 Activity 是在 /app/homeapp
中,并通过 ContentProvider
从 /app/sourceapp
读取数据。它还从自己的 ContentProvider
中读取一些数据。
我想在测试期间控制数据。示例测试如下所示:
@RunWith(AndroidJUnit4.class)
@MediumTest
public class MainAppActivityTest {
@Rule
public ActivityTestRule<MusicHomeActivity_> activityRule = new ActivityTestRule<>(MusicHomeActivity_.class);
@Test
public void testDataDisplayed() throws Exception {
// Check view in target.
// Ensure items are displayed properly.
// Take screenshot, compare.
}
}
(它基于新的 AndroidJUnit4 类)。
在 src/androidTest/AndroidManifest.xml
中,我实际上能够像这样创建一个新的 stub ContentProvider
:
<manifest
package="com.company.app"
xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<provider
android:name="com.company.app.DataContentProviderStubbed"
android:authorities="com.company.app.data.stubbed"
android:exported="true"/>
</application>
</manifest>
现在我的关键问题是如何将 DataContentProviderStubbed
设置为默认提供程序。我无法覆盖权限或赋予它更高的优先级,系统将拒绝此操作(给定权限只能存在一个 ContentProvider)。
作为引用,我正在尝试将它注入(inject)到使用 LoaderManager
的 Fragment 中:
// onViewCreated
getLoaderManager().restartLoader(LOADER_DEVICES, null, new LoaderManager.LoaderCallbacks<Cursor>() {
@Override
public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
return new CursorLoader(context, CONTENT_URI, PROJECTION,
DataContentDescriptor.Device.DEVICE_TYPE + " = ? AND " + DataContentDescriptor.Device.UDN + " != ?",
new String[]{TYPE_SERVER, myUdn}, null);
}
@Override
public void onLoadFinished(final Loader<Cursor> loader, final Cursor data) {
deviceAdapter.setDevicesCursor(data);
}
@Override
public void onLoaderReset(final Loader<Cursor> loader) {
deviceAdapter.setDevicesCursor(null);
}
});
到目前为止的一些想法:
public static
标志配置它以控制该字段。请不要,很难维护。哪种方式可以确保使用 stub 的 ContentProvider?
最佳答案
如您所述,您需要为提供商提供不同的权限字符串。因此,您需要您的客户端代码为您的构建无缝使用正确的授权字符串(main
与 androidTest
)。
如果您的权限字符串是从应用程序 ID 派生的,那么您可以从 BuildConfig.APPLICATION_ID
合成正确的权限字符串以在您的代码中使用。
如果您的权限字符串不容易从 APPLICATION_ID
生成,您可以尝试添加自己的 buildConfigField
或 resValue
来定义它们build.gradle
,因此您可以在您的 Java 中引用它们。如果您想最大程度地减少代码重复,您可以使用 list 占位符从 Gradle 中的值定义 list 中的权限字符串。然后,您可以使用通用的知识来源(例如,gradle.properties
)来填充 list 占位符和 buildConfigField
/resValue
。
现在,我知道上一段的问题在于它适用于产品口味。我还没有为 androidTest
尝试过,因此您可能无法为 androidTest
设置不同的 buildConfigField
等。
关于带有外部模拟 ContentProvider 的 androidTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32224105/
我正在开发一个应用程序,我希望它同时适用于 Android 和 Blackberry(将来可能适用于 JavaME)。业务逻辑对所有平台都是通用的 - 因此,代码中的相应层也是如此。 但我也有一个数据
谁能告诉我如何创建一个 ContentProvider,它可以查询多个数据库/ContentProvider 以获得 SearchView 提供的搜索建议。 最佳答案 使用 ContentProvid
我想将一个通用的 POJO 放入 ContentValues 并在 ContentProvider 中解码。 我一直在绞尽脑汁:Parcelables、ContentValues 和插入 SQLite
我在 AsyncTask 中有一个 ContentProvider 访问权限,在手机上查找存储在 sqlite 中的一些数据时通常工作正常。 不过,我还有一些其他后台服务可以进行网络检查以及下载和更新
我正在尝试使用自定义 ContentProvider 提供游戏内高分。它将使用服务器连接而不是 SQLite 数据库。 现在,ContentProvider 的query()、update() 和de
Google 就 ContentProvider 中的路径遍历漏洞发出警告 https://support.google.com/faqs/answer/7496913 Implementations
我见过很多使用ContentProvider与sqlite数据库交互的例子。我在某处读到的文档说 ContentProvider 也能够与普通文件交互。但我们要怎么做呢?到目前为止,我找不到与此相关的
如何将搜索中的引号转义到 ContentProvider?像这样查询: String value = "O'Key" ;/ / string contains a quote Cursor peopl
我正在开发一个将数据存储在 SQLite 数据库中的内容提供程序。在开发过程中,我需要更改模式,或者完全删除数据库并重新构建它(在这个开发阶段我不会升级数据库)。 我找到了数据库文件,存储在/data
大家,我在看android源码。但是我找不到对我有值(value)的东西。实际上,我想知道ContentProvider是否像AIDL一样工作。你知道,AIDL可以实现两个独立应用程序之间的通信。 所
我正在尝试为我的应用程序编写一个内容提供程序,以允许访问我的应用程序存储在 SD 卡上的某些文件。文件的名称是其内容 URI 的哈希值,因此例如 content://my.app.files/test
有什么方法可以利用 ContentProvider 检查我的 Android 手机是否已连接到互联网? 谢谢 最佳答案 我想你想要ConnectivityManager .有一个例子 here . 这
是否可以在应用中初始化contentprovider? 因为我需要为每个用户/服务器组合创建一个数据库,并且我在内容提供者的 oncreate 方法中使用登录信息创建数据库! 最佳答案 根据听起来您正
仅当您需要在多个应用程序之间共享数据时才需要内容提供程序。 这是使用它的唯一目的吗?简单地从 WS 获取数据并将其写入 CP,然后在 Activity 中从这里读取怎么样? iosched呢? :这里
当我从ContentProvider 获取Cursor 对象时,那时我可以使用这个游标对象来检索所有数据。我的问题是: 游标是否包含里面的所有数据。这意味着系统已经查询并花费了时间来加载数据。 这只是
我有一些加密存储 (SQLite),想实现我自己的 ContentProvider。前提是: 只有在以下情况下才应授予/可能访问权限工作/启动我的应用程序 - 总而言之其他情况访问必须被拒绝返回给用户
我有一个 ContentProvider 子类来处理我所有的数据库工作,还有一个在后台运行的服务。 我似乎无法将服务绑定(bind)到 ContentProvider。我是否可以从 ContentPr
我有一个在 list 中声明的 ContentProvider,它是什么时候真正创建的?当应用程序启动时但在启动第一个 Activity 之前?当第一次查询/更新/插入完成时?什么时候? 最佳答案
我想实现一个操作多个表的ContentProvider。到目前为止,这是我尝试过的。我编写了一个 Java Interface,表示每个表都应在其 CRUD 类中实现的 CRUD 操作。 public
我制作了自己的 contentprovider,我通过多次插入将大量数据一次性放入其中。 该应用程序将从外部源接收数据,此时我收到大约 30 个项目(因此是插入的 30 倍)。 现在我注意到这需要很多
我是一名优秀的程序员,十分优秀!