小编AIn*_*tel的帖子

Dagger + Retrofit.在运行时添加auth头

我想知道Dagger是否有办法知道它应该在新数据可用时重新创建一个对象.

我所说的实例是我用于改造的请求标题.在某些时候(当用户登录时),我得到一个令牌,我需要将其添加到改造的标题中以进行经过身份验证的请求.问题是,我留下了相同的未经验证的改造版本.这是我的注射代码:

@Provides
    @Singleton
    OkHttpClient provideOkHttpClient(Cache cache) {
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .cache(cache).build();
         client
                .newBuilder()
                .addInterceptor(
                    chain -> {
                        Request original = chain.request();
                        Request.Builder requestBuilder = original.newBuilder()
                                .addHeader("Accept", "Application/JSON");
                        Request request = requestBuilder.build();
                        return chain.proceed(request);
                    }).build();
        return client;
    }

  @Provides
    @Singleton
    Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient) { 
        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create(gson))
                .addCallAdapterFactory(RxErrorHandlingCallAdapterFactory.create())
                .baseUrl(mBaseUrl)
                .client(okHttpClient)
                .build();
        return retrofit;
}

@Provides
    @Singleton
    public NetworkService providesNetworkService(Retrofit retrofit) {
        return retrofit.create(NetworkService.class);
    }
Run Code Online (Sandbox Code Playgroud)

关于如何使这项工作的任何想法?

java android dagger dagger-2 retrofit2

25
推荐指数
2
解决办法
9624
查看次数

用于确定Android中信用卡的正则表达式

我对正则表达式真的很新,但我认为我的问题可能会超出现在的范围.正如标题所说,我正在试图确定信用卡是签证,美国运通卡,万事达卡等.

我查看了这篇文章,其中给出了每种卡类型的正则表达式:

您如何根据号码检测信用卡类型?

这是我之后使用的代码,但它根本不做任何事情:

etCCNum.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {



            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                Log.d("DEBUG", "beforeTextChanged : "+s);

            }

            @Override
            public void afterTextChanged(Editable s) {
                Pattern pattern = Pattern.compile("^6(?:011|5[0-9]{2})[0-9]{3,}$");
                Log.d("DEBUG", "afterTextChanged : "+s);
                String ccNum = s.toString();
                Matcher matcher = pattern.matcher(ccNum);
               if(matcher.matches()){
                   Log.d("DEBUG", "afterTextChanged : discover");
               }

            }
        });
Run Code Online (Sandbox Code Playgroud)

pattern.compile函数中的regexp用于根据上面的帖子确定Discover卡.我注意到除了正则表达式中的"^"之外我真的无法工作(即("^ 4" - 签证,"^ 6001"发现)但是在编辑时这显然是不够的例如.任何想法是什么?我认为这可能是我的Java的一个问题,但我正在运行Java 7

我可能想把它作为一个新问题,但我也想知道如何使用正则表达式来获得各种信用卡的间距,即使用户返回并编辑数字(xxxx xxxx xxxx xxxx)

编辑:从上面添加了DEBUG日志.我的输入是一些应该与某些信用卡相关联的数字.目前我正在使用下面提供的Eagle Eye代码(它也适用于检测输入是其中一种卡类型):

final …

java regex android

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

Redis中等效的复合主键

我是nosql数据库的新手,所以请原谅我的sql思想,但我希望存储可以通过2个键之一“查询”的数据。结构如下:

{user_id, business_id, last_seen_ts, first_seen_ts} 
Run Code Online (Sandbox Code Playgroud)

如果这是一个sql DB,我将使用user_id和business_id作为主组合键。我正在寻找的查询类型是

1.'获取所有在business_id = x的地方'

2.'在user_id = x的所有地方获取'

有小费吗?我认为我无法根据上述2种检索类型创建简单的二级索引。我调查了诸如“ zadd”和“ zrange”之类的命令,但这里实际上并没有涉及任何排序。

对于我来说,Redis的用例是减轻SQL数据库上的读写操作,同时该程序计算(将其存储在redis中)最终将写入SQL DB的内容。

nosql composite-primary-key redis

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

速率限制请求和 Amazon SQS

我有一个关于如何减慢我的 api 请求的问题。对于我正在使用的特定第三方 API,我可以每 2 秒发出 3 个请求。如果我超过那个数字,我会返回status code 429一个等待时间(以毫秒为单位)。

这个 api 经常被调用,是我自己的服务器收到不受速率限制的传入请求的直接结果。

由于我不需要同步处理第三方 api 请求,我决定将工作卸载到 AWS 上的弹性 beantalk 工作框,默认情况下从 Amazon SQS 读取。

因此,如果从第三方 api 返回状态代码 429,我的工作人员会将 SQS 消息扔回队列。当到达等待时间时,这不可避免地使 api 调用工作。然而,这似乎是一个糟糕的解决方案

有什么方法可以告诉工作机上的守护进程将消息留在队列中等待分配的等待时间?或者我可以设置守护进程从队列中读取的速率吗?我正在寻找一种正确的方法(特定于实现)来使用 AWS 上的工作线程和队列进行速率限制。十分感谢你的帮助!

编辑:我会假设有可以在 AWS 上修改的配置来完成我的要求,但无论哪种方式,我都在为我描述的设置寻找特定的解决方案。我不太确定如何修改或控制弹性豆茎工作箱上的守护进程。

amazon-ec2 rate-limiting amazon-sqs amazon-web-services

7
推荐指数
1
解决办法
1万
查看次数

Android帐户管理器没有缓存authToken

嗨,我打电话时遇到恢复我的authToken的问题

mAccountManager.blockingGetAuthToken(Auth.getAccount(), Auth.AUTH_TOKEN_TYPE, true)

我得到一个空字符串,这导致我查看我的AbstractAccountAuthenticator类,特别是getAuth().这是它的作用:

public Bundle getAuthToken(AccountAuthenticatorResponse response,
        Account account, String authTokenType, Bundle options)
        throws NetworkErrorException {

    final AccountManager am = AccountManager.get(mContext);

    String authToken = am.peekAuthToken(account, authTokenType);
    String uid = am.getUserData(account, AccountManager.KEY_CALLER_UID);


    // return bundle with authToken
    if (!TextUtils.isEmpty(authToken)) {
        final Bundle result = new Bundle();
        result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
        result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
        result.putString(AccountManager.KEY_AUTHTOKEN, authToken);
        result.putString(AccountManager.KEY_CALLER_UID, uid);
        return result;
    }


    return null;
}
Run Code Online (Sandbox Code Playgroud)

peekAuthToken返回null,但是我uid从getUserData 得到了正确的结果,这让我相信我正在添加帐户.这是我设置authToken的方式:

mAccountManager.addAccountExplicitly(account, accountPassword, extraData);
//The addAccount is working, and I can obtain the extraData in getAuth …
Run Code Online (Sandbox Code Playgroud)

android auth-token

6
推荐指数
1
解决办法
1458
查看次数

保持按钮处于活动状态,直到再次单击为止

我觉得我有一个相对简单的问题,我不知道该怎么做.我有一个按钮类型的html输入标签,它调用了一个javascript onclick函数.这部分工作正常,但我希望能够添加到我的onClick功能,使按钮保持活动状态的能力(以便它保持突出显示,直到再次点击).

有任何想法吗?我试着把注意力集中在它上面,但我认为它不可能有多个按钮焦点,这听起来真的像黑客.

html javascript css jquery web

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