小编Guy*_*uyZ的帖子

RxJava + Retrofit - >用于API调用的BaseObservable,用于集中响应处理

我是RxJava的新手所以请原谅我,如果这听起来太新手了:-).

截至目前,我有一个抽象的CallbackClass,它实现了Retofit Callback.在那里我捕获了Callback的"onResponse"和"onError"方法,并在最终转发到自定义实现的方法之前处理各种错误类型.我还使用此集中式类来进行请求/响应应用程序日志记录和其他内容.

例如:对于来自我的服务器的特定错误代码,我在响应正文中收到一个新的Auth令牌,刷新令牌,然后clone.enqueue调用.当然,我的服务器的响应还有其他一些全局行为.

当前解决方案(无Rx):

    public abstract void onResponse(Call<T> call, Response<T> response, boolean isSuccess);

    public abstract void onFailure(Call<T> call, Response<T> response, Throwable t, boolean isTimeout);

    @Override
    public void onResponse(Call<T> call, Response<T> response) {
        if (_isCanceled) return;

        if (response != null && !response.isSuccessful()) {
            if (response.code() == "SomeCode" && retryCount < RETRY_LIMIT) {
                TokenResponseModel newToken = null;
                try {
                    newToken = new Gson().fromJson(new String(response.errorBody().bytes(), "UTF-8"), TokenResponseModel.class);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                    SomeClass.token = newToken.token;
                    retryCount++;
                    call.clone().enqueue(this);
                    return;
                }
            } …
Run Code Online (Sandbox Code Playgroud)

android rx-java rx-android retrofit2

18
推荐指数
1
解决办法
2816
查看次数

Android活动启动模式和深层链接问题

我的应用有2项活动.应用程序的根活动是MainActivity.如果凭据丢失或无效,则用户将在完成MainActivity时重定向到LoginActivity.

如果我将主活动的启动模式设置为singleTask并且我在LoginActivity的内部片段中=>最小化应用程序 - >从启动器图标启动应用程序=> MainActivity启动(因为它是singleTask活动)并且重定向到LoginActivity,但当然是重定向到堆栈中的第一个片段.

所需行为(从重新启动时发生)是它将保留当前活动的实例并在LoginActivity的堆栈中显示正确的片段.

这当然可以通过将启动模式设置为singleTop轻松解决,但随后会出现另一个问题!DeepLink麻烦!

如果我的应用程序在后台打开,我在单一模式下点击浏览器或电子邮件中的链接 - 该应用程序将作为转发应用程序的子任务打开(如果您点击最近,您将看到您的应用程序打开两次 - 一次作为之前的常规实例和浏览器/电子邮件中的一个实例.这当然非常不方便,可以通过 - 你知道 - 将启动模式设置为singleTask来解决!

对此问题的任何帮助将非常感谢.

   <!-- Main Activity -->
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:host="somehost"
                android:scheme="myscheme" />
        </intent-filter>
    </activity>

    <!-- Login Activity -->
    <activity
        android:name="LoginActivity"
        android:launchMode="singleTask"
        android:screenOrientation="portrait" />
Run Code Online (Sandbox Code Playgroud)

android deep-linking launchmode

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

C#按特定参数排序对象数组

我对编程比较陌生.我有一个对象数组,不一定是完整的(可能包括空行).我想通过其中一个类参数"int moveScore"对其进行排序.这是我的数组(目前只有32个条目)

Score[] firstPlyScore = new Score[1000];
Run Code Online (Sandbox Code Playgroud)

我尝试了两件事来进行分类

1 在"Score"类中,我继承了"IComparable"并使用了"CompareTo"方法,如下所示

public int CompareTo(object obj)
        {
            Score x = (Score)obj;

            if (this.moveScore < x.moveScore)
                return -1;

            if (this.moveScore > x.moveScore)
                return 1;

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

我叫它用;

Array.Sort(firstPlyScore);
Run Code Online (Sandbox Code Playgroud)

问题是它确实排序正确,但在数组的末尾.含义行0-966为"null",967-999正确排序(967具有最高"int",999具有最低值).有没有什么办法解决这一问题.

2 我也尝试过这个

Array.Sort(firstPlyScore, delegate
    (Score x, Score y) { return x.moveScore.CompareTo(y.moveScore); });
Run Code Online (Sandbox Code Playgroud)

这里的问题是它在达到"空"行时崩溃了.

最感谢!

c# arrays sorting

0
推荐指数
1
解决办法
2398
查看次数