我想创建一个单元测试来验证API是否成功获得了Repos列表.我希望测试实际上建立网络连接而不是使用模拟服务器.而且,例如使用RoboElectric会很好,因此测试可以在JVM上运行.
这是从MVP架构测试模型.
我正在使用来自Mosby的示例项目,它使用Dagger 2和Retrofit 1.9.
public interface GithubApi
{
@GET("/repositories")
@Headers("Cache-Control: no-cache")
public void getRepos(Callback<List<Repo>> callback);
}
Run Code Online (Sandbox Code Playgroud)
这是模块:
@Module()
public class SampleModule
{
@Provides @Singleton public GithubApi providesGithubApi()
{
OkHttpClient client = new OkHttpClient();
client.setCache(new Cache(context.getCacheDir(), 10 * 1024 * 1024));
RestAdapter restAdapter = new RestAdapter.Builder()
.setClient(new OkClient(client))
.setEndpoint("https://api.github.com")
.build();
return restAdapter.create(GithubApi.class);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个List
的Pin
对象(List<Pin>
),其中的Pin
类具有以下属性:
String pinNumber, String pinType, Date insertDate
我想得到一个HashMap
具有<String pinNumber, int count>
不同pinNumber的,告诉我在中有多少不同的pinNumber List<Pin>
以及每个计数。
所以我知道的方法是:
List<Pin>
HashMap
包含pinNumber的键值,并且:我想对Pin
对象中的每个字段执行相同的操作。
我确定应该有一个更简单的方法来做到这一点?
番石榴也许更简单?
如果我有 3 种口味 flavor1、flavor2 和 flavor3,每种口味都有 Dev、Pat 和 Prod“子口味”版本,它们的参数不同,但每种主要口味都有不同的资源。
所以我现在有 9 种不同的风格,但只有 3 个不同的资源文件夹)。我希望相同的“子口味”使用相同的资源。
我怎样才能做到这一点?我在关于 flavorDimensions 的文档中看到过,但不确定如何配置资源文件夹。
目前我正在使用类似的东西
sourceSets {
flavor1_dev{
res.srcDir 'src/flavor1/res'
}
flavor1_prod{
res.srcDir 'src/flavor1/res'
}
flavor2_dev{
res.srcDir 'src/flavor2/res'
}
flavor2_prod{
res.srcDir 'src/flavor2/res'
}
}
Run Code Online (Sandbox Code Playgroud) android android-gradle-plugin android-productflavors android-flavordimension
在Java中使用GSON是否有任何注释,我可以指示一个字段,即使它是一个对象,它应该将它保持为原始字符串.?
或者最简单的方法是什么?
//This is the original
@SerializedName("perro")
public Perro perro
//This is what I want to achieve
@SerializedName("perro")
public String perro
So the result should be
perro = "{"Users":[{"Name":"firulais","Raza":"beagle"},{"Name":"Spike","Value":"Terrier"}]}"
Run Code Online (Sandbox Code Playgroud) 我有一个SearchView执行网络请求来搜索某些曲目,然后用结果填充RecylerView.我发现这个代码工作正常.
我已经通过适配器集成了RecyclerView EmptyView,但现在我正在尝试在此代码中集成LoadingView(Progress)和ErrorView.我试图在ConcatMap中将LoadView(ProgressBar)放在Visibility True上但是得到的错误是"只有创建视图层次结构的原始线程可以触及它的视图."这可以解决在MainThread上运行它但我确定有一个更好的方法来做到这一点.
有人可以更好地了解显示/隐藏ErrorView和LoadingView的逻辑可以在何处以及如何集成到此代码中?
我也在使用RxBinding.也许还使用RxRecyclerView会是一个好主意?
RxSearchView.queryTextChanges(searchView).
filter(charSequence ->
!TextUtils.isEmpty(charSequence))
.throttleLast(100, TimeUnit.DAYS.MILLISECONDS)
.debounce(200, TimeUnit.MILLISECONDS)
.onBackpressureLatest()
.concatMap(searchTerm ->
{
return searchTracks(searchTerm).
.subscribeOn(Schedulers.io())
.onErrorResumeNext(throwable1 -> {
//handle error somehow, change UI
return Observable.empty();
}
);
}
)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(tracks -> {
populateTracks(tracks);
}
});
}, throwable -> {
//show errorView
});
Run Code Online (Sandbox Code Playgroud) android ×4
java ×2
retrofit ×2
collections ×1
dagger ×1
gson ×1
guava ×1
json ×1
jsonreader ×1
mosby ×1
rx-android ×1
rx-java ×1
testing ×1