我正在尝试运行一个取决于上下文的本地单元测试,并遵循本指南:https://developer.android.com/training/testing/unit-testing/local-unit-tests#kotlin 我设置像我这样的项目(点击此链接:https://developer.android.com/training/testing/set-up-project):
的build.gradle(APP)
android {
compileSdkVersion 28
buildToolsVersion '27.0.3'
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
versionCode 76
versionName "2.6.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
useLibrary 'android.test.runner'
useLibrary 'android.test.base'
useLibrary 'android.test.mock'
}
testOptions {
unitTests.returnDefaultValues = true
unitTests.all {
// All the usual Gradle options.
testLogging {
events "passed", "skipped", "failed", "standardOut", "standardError"
outputs.upToDateWhen { false }
showStandardStreams = true
}
}
unitTests.includeAndroidResources = true
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation("androidx.test.espresso:espresso-core:$espressoVersion", { …
Run Code Online (Sandbox Code Playgroud) android unit-testing android-espresso android-instrumentation
如何将 Jetpack Compose 上 TalkBack 上要读取的默认文本内容描述更改为我想要的任何文本?
android talkback android-jetpack-compose android-jetpack-compose-text
我正在研究谷歌的架构组件,以便将ViewModel和LiveData实现到我的应用程序,官方文档说:
注意:由于ViewModel比特定活动和片段实例更长,因此它永远不应引用View或任何可能包含对活动上下文的引用的类.如果ViewModel需要Application上下文(例如,查找系统服务),它可以扩展AndroidViewModel类并具有在构造函数中接收Application的构造函数(因为Application类扩展了Context)
在那之后,我最终得到了这样的代码:
public class ViewModelTest extends AndroidViewModel {
public ViewModelTest(Application application) {
super(application);
}
public void test(){
Prefs.getCurrentCode(getApplication());
}
Run Code Online (Sandbox Code Playgroud)
我应该在活动中正常实例吗?
val viewModel2 = ViewModelProviders.of(this).get(ViewModelTest::class.java)
viewModel2.test()
Run Code Online (Sandbox Code Playgroud)
不是很糟糕吗?要在需要访问SharedPreferences或需要上下文的任何内容时使用此应用程序变量?如果是,我应该避免在ViewModel上使用它并仅在视图上使用它吗?特别是如果我想用一个需要上下文的值更新UI组件.我有点不知道如何解决这个问题,我愿意接受任何建议.
提前致谢
android viewmodel android-context android-application-class android-livedata
我有一个android服务,可在服务器在线时启动并与服务器同步不同类型的数据。我是Kotlin协程的新手,我正在尝试完成以下任务:
fun syncData{
//Job1 make retrofit call to server
//Job2 make retrofit call to server after job1 is done.
//Job3 make retrofit call to server after job 2 is done and so on.
//After all jobs are done I'll stop service.
}
Run Code Online (Sandbox Code Playgroud)
我在关注这篇文章: Kotlin Coroutines在Android中的正确方法
这给我带来了这个解决方案:
fun syncData() = async(CommonPool){
try{
val sync1 = async(CommonPool){
job1.sync()
}
val sync2 = async(CommonPool){
job2.sync()
}
val sync3 = async(CommonPool){
job3.sync()
}
val sync4 = async(CommonPool){
job4.sync()
}
job1.await()
job2.await()
job3.await()
job4.await()
}catch …
Run Code Online (Sandbox Code Playgroud) 我需要在 Android 应用程序上构建流量监视器,并且需要存储通过改造发送和接收的所有 json 的大小。使用日志我可以看到它的实际大小,但我还没有找到一种方法来获取此信息以便保存它。我也无法获得response.raw,因为它已经被解析到我的类中。有什么办法可以实现这一点吗?
编辑:将 vadkou 答案标记为最佳答案。
我没有创建新的拦截器,而是传递了 lamda 表达式:
httpClient.addInterceptor( chain -> {
okhttp3.Request request = chain.request();
okhttp3.Response response = chain.proceed(request);
if(request.body()!=null) {
long requestLength = request.body().contentLength();
Log.e("SERVICE GENERATOR", " CONTENT LENGTH" + requestLength);
}
long responseLength = response.body().contentLength();
Log.e("SERVICE GENERATOR", " RESPONSE LENGTH" + responseLength);
return response;
});
Run Code Online (Sandbox Code Playgroud) android ×4
android-jetpack-compose-text ×1
async-await ×1
json ×1
kotlin ×1
retrofit ×1
talkback ×1
unit-testing ×1
viewmodel ×1