小编Nex*_*xen的帖子

处理onError和继续处理的最佳实践

我是RxJava的新手,但我正在将它集成到一个项目中,我正在努力帮助我学习它.我遇到了一个关于最佳实践的问题.

我有一个关于如何onError防止停止Observable处理的问题.

这是设置:

我有一个userIds列表,我想做两个或更多的网络请求.如果任何网络请求对用户标识失败,则该用户标识将不会被更新并且可以被跳过.这不应该阻止处理其他用户标识.我确实有一个解决方案,但它涉及嵌套订阅(请参阅第二个代码块).我看到的一个问题是,如果每次呼叫失败,即使在检测到某个阈值数量失败后,也无法短路并阻止其余部分点击网络资源.

有一个更好的方法吗?

在传统的代码中:

List<String> results = new ArrayList<String>();
for (String userId : userIds) {
    try {
        String info = getInfo(userId);  // can throw an GetInfoException
        String otherInfo = getOtherInfo(userId);  // can throw an GetOtherInfoException
        results.add(info + ", " + otherInfo);
    } catch (GetInfoException e) {
        log.error(e);
    } catch (GetOtherInfoException e) {
        log.error(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:

伪代码:

userid -> network requests -> result 
1 -> a, b -> onNext(1[a ,b])
2 -> a, onError …
Run Code Online (Sandbox Code Playgroud)

rx-java

26
推荐指数
2
解决办法
3万
查看次数

如何动画渐变?

如何设置从颜色#1到颜色#2的渐变动画?类似的东西

在此输入图像描述

我打算将它用作单位的健康栏(因此,它将是以绿色开头并以红色结束的有限动画)

animation android gradient android-custom-view ondraw

12
推荐指数
3
解决办法
9547
查看次数

如何通过Retrofit在@Query中传递自定义枚举?

我有一个简单的枚举:

public enum Season {
    @SerializedName("0")
    AUTUMN,
    @SerializedName("1")
    SPRING;
}
Run Code Online (Sandbox Code Playgroud)

从某个版本开始,GSON就能够解析这些枚举.为了确保,我这样做了:

final String s = gson.toJson(Season.AUTUMN);
Run Code Online (Sandbox Code Playgroud)

它按我的预期工作.输出是"0".所以,我尝试在我的Retrofit服务中使用它:

@GET("index.php?page[api]=test")
Observable<List<Month>> getMonths(@Query("season_lookup") Season season);
/*...some files later...*/
service.getMonths(Season.AUTUMN);
Run Code Online (Sandbox Code Playgroud)

并且还添加了日志以确定其结果:

HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

OkHttpClient httpClient = new OkHttpClient.Builder()
        .addInterceptor(httpLoggingInterceptor)
        .build();
Run Code Online (Sandbox Code Playgroud)

但它失败了.@Query完全忽略@SerializedName并使用.toString(),所以日志显示我.../index.php?page[api]=test&season_lookup=AUTUMN.

我跟踪了Retrofit源并找到了RequestFactoryParser带有行的文件:

Converter<?, String> converter = 
    retrofit.stringConverter(parameterType, parameterAnnotations);
action = new RequestAction.Query<>(name, converter, encoded);
Run Code Online (Sandbox Code Playgroud)

似乎,就像它根本不关心枚举一样.在这些线之前,它被测试rawParameterType.isArray()为一个阵列或Iterable.class.isAssignableFrom()仅此而已.

改造实例创建是:

retrofit = new Retrofit.Builder()
                .baseUrl(ApiConstants.API_ENDPOINT)
                .client(httpClient)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) …
Run Code Online (Sandbox Code Playgroud)

rest android gson retrofit retrofit2

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

warp如何与原子操作一起工作?

warp中的线程在物理上是并行的,所以如果其中一个(称为线程X)启动一个原子操作,那么其他什么呢?等待?这是否意味着,当线程X被推送到原子队列时,所有线程都将等待,获取访问权限(互斥量)并使用该互斥锁保护内存,然后重新安排互斥锁?

有没有办法把其他线程用于某些工作,比如读取一些内存,所以原子操作会隐藏它的延迟?我的意思是,15个闲置的线程......不太好,我想.Atomic真的很慢,不是吗?我怎样才能加速它呢?是否有任何模式可以使用它?

使用共享内存的原子操作是否锁定了银行或整个内存?例如(没有互斥),有__shared__ float smem[256];

  • Thread1运行 atomicAdd(smem, 1);
  • Thread2运行 atomicAdd(smem + 1, 1);

这些线程适用于不同的银行,但通常是共享内存.他们是运行parralel还是排队?如果Thread1和Thread2来自分离的warp或一般的warp,那么这个例子有什么不同吗?

c c++ performance cuda atomic

5
推荐指数
1
解决办法
564
查看次数

如何在没有浮点数/双数的情况下生成均匀和高斯分布的伪随机数?

我必须在汇编程序上编写伪随机生成器,没有任何浮点/双操作和函数,如sin/cos,sqrt等.所以我不能使用通用方法来做到这一点.我也有随机数限制:00-0F.我怎样才能做到这一点?

据我所知,我首先需要生成统一数字.我这样做是这样的:x = (13 * x + 7) % 16;(但它有一个问题-这是有史以来的unifromest分布如果产生15个号码,我知道所有的人,我可以说,16日有100%的概率,因为那里是本期无重复是16. (模块)).

之后,我需要将这些数字重新生成为高斯数.我在互联网上找到了这个解决方案,但它不起作用.

for (i = 0; i < N; ++i) // N - amount of randomized numbers
{
    ++gx[x = (a * x + c) % m]; //gx - histogram of x
    xm[i] = x; // xm - massive of randomized numbers in uniform
    y = 0;      
    for (j = 0; j < i + 1; ++j)
    {
        y += xm[j] * n - j; // n - …
Run Code Online (Sandbox Code Playgroud)

c c++ algorithm assembly

5
推荐指数
1
解决办法
469
查看次数

如何通过.bat'激活'后运行'cfx xpi'?

我正在尝试自动安装我的插件.Mozilla说这很简单,但是:

  1. 我没有while在.bat文件或sleepmilisec中找到任何循环.
  2. 我不明白,如何使用activate.bat,并cfx xpi在一个CMD窗口顺序,也毕竟使用wget在其他CMD.

即使第二部分我该怎么办?我尝试过类似的东西:

START cmd /K "activate "cfx xpi"" && wget --post-file=tst-closing-cur-tab.xpi http://localhost:8888/

要么

START cmd /K "activate && "cfx xpi"" && wget --post-file=tst-closing-cur-tab.xpi http://localhost:8888/

但它总是cfx在CMD中运行,而不是在"虚拟CMD"之后运行activate

batch-file firefox-addon-sdk

5
推荐指数
1
解决办法
456
查看次数