我是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) 我的应用有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) 我对编程比较陌生.我有一个对象数组,不一定是完整的(可能包括空行).我想通过其中一个类参数"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)
这里的问题是它在达到"空"行时崩溃了.
最感谢!
android ×2
arrays ×1
c# ×1
deep-linking ×1
launchmode ×1
retrofit2 ×1
rx-android ×1
rx-java ×1
sorting ×1