小编loc*_*ost的帖子

使用RxJava连锁两个改造的可观测量

我想一个接一个地执行2个网络呼叫.两个网络调用都返回Observable.第二呼叫从所述第一呼叫的成功的结果使用数据,在第二个呼叫的成功的结果从方法使用数据两者第二呼叫的所述第一的成功的结果和.此外,我应该能够处理这两个 onError的"事件"是不同的.我怎样才能避免回调地狱,如下例所示:

       API().auth(email, password)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1<AuthResponse>() {
                @Override
                public void call(final AuthResponse authResponse) {
                    API().getUser(authResponse.getAccessToken())
                            .subscribe(new Action1<List<User>>() {
                                @Override
                                public void call(List<User> users) {
                                    doSomething(authResponse, users);
                                }
                            }, new Action1<Throwable>() {
                                @Override
                                public void call(Throwable throwable) {
                                    onErrorGetUser();
                                }
                            });
                }
            }, new Action1<Throwable>() {
                @Override
                public void call(Throwable throwable) {
                    onErrorAuth();
                }
            });
Run Code Online (Sandbox Code Playgroud)

我知道zip,但我想避免创建"Combiner类".

更新1. 试图实现akarnokd的答案:

         API()
            .auth(email, password)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .flatMap(authResponse -> API()
                    .getUser(authResponse.getAccessToken())
                    .doOnError(throwable -> {
                        getView().setError(processFail(throwable));
                    }), ((authResponse, users) …
Run Code Online (Sandbox Code Playgroud)

java android reactive-programming rx-java retrofit

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

@IntDef Android支持与杰克逊反序列化的公告

使用JacksonAnnotations和Android支持注释.我的POJO是:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Schedule {
    public static final int SUNDAY = 0;
    public static final int MONDAY = 1;
    public static final int TUESDAY = 2;
    public static final int WEDNESDAY = 3;
    public static final int THURSDAY = 4;
    public static final int FRIDAY = 5;
    public static final int SATURDAY = 6;

    private Integer weekday;

    public Schedule() {
    }

    @Weekday
    public Integer getWeekday() {
        return weekday;
    }

    public void setWeekday(@Weekday Integer weekday) {
        this.weekday = …
Run Code Online (Sandbox Code Playgroud)

android json jackson android-support-library

22
推荐指数
1
解决办法
991
查看次数

RxJava + Retrofit长轮询

我的问题是我无法获得无限的流Retrofit.在我获得初始poll()请求的凭证后 - 我做了初始poll()请求.如果没有更改,则每个poll()请求在25秒内响应,如果有任何更改,则每个poll()请求更早 - 返回changed_data [].每个响应都包含timestamp下一个轮询请求所需的数据 - 我应该在每个poll()响应之后执行新的poll()请求.这是我的代码:

getServerApi().getLongPollServer() 
  .flatMap(longPollServer -> getLongPollServerApi(longPollServer.getServer()).poll("a_check", Config.LONG_POLLING_SERVER_TIMEOUT, 2, longPollServer.getKey(), longPollServer.getTs(), "") 
   .take(1) 
   .flatMap(longPollEnvelope -> getLongPollServerApi(longPollServer.getServer()).poll("a_check", Config.LONG_POLLING_SERVER_TIMEOUT, 2, longPollServer.getKey(), longPollEnvelope.getTs(), ""))) 
   .retry()
   .subscribe(longPollEnvelope1 -> {
   processUpdates(longPollEnvelope1.getUpdates());
});
Run Code Online (Sandbox Code Playgroud)

我是RxJava的新手,也许我不明白,但我无法获得无限的流.我接到3个电话,然后是onNext和onComplete.

PS也许有更好的解决方案在Android上实现长轮询?

android long-polling rx-java retrofit

20
推荐指数
1
解决办法
2507
查看次数

FragmentManager IllegalStateException:没有主机

更新:当我把nullcheks(片段!= null,getActivity()!= null)放在我能做的时候崩溃了.

我的应用程序使用ViewPager(屏幕外限制5),并使用getSupportFragmentManager()初始化FragmentStatePagerAdapter.每个页面都有自己的片段和后台堆栈.

应用程序在启动时崩溃.问题仅发生在preLollipop设备和仿真器上.使用最新支持lbrary(尝试24.0.0也 - 相同结果)Stacktrace:

java.lang.IllegalStateException:在android.support的android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1267)的android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1267)处没有主机.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:2138)位于android.support.v4.app.Fragment.onCreate(Fragment.java:1254)android.support.v4.app.Fragment.performCreate(Fragment.java) :2062)在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1051)的android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)android.support.v4.app上的android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1051). BackStackRecord.run(BackStackRecord.java:758)android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1632)at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637)at android android.support.v4.view.ViewPager.pop上的.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:166)ulate(ViewPager.java:1237)位于android.sview的android.support.v4.view.ViewPager.populate(ViewPager.java:1085)android.sview.v4上的android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1611) .View.measure(View.java:16497)位于android.widget.Linout.measureVertical的android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)上的android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) LinearLayout.java:695)在android.view.measure.View.measure(View.java:16497)的android.widget.Linear.onMeasure(LinearLayout.java:588)android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) )在android.widget.FreeLayout.onMeasure(FrameLayout.java:310)的android.view.measure.View.measure(View.java:16497)android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout.java:719)android.widget Android.widge上android.view.visionGroup.measureChildWargins(ViewGroup.java:5125)的android.view.View.measure(View.java:16497)的.RelativeLayout.onMeasure(RelativeLayout.java:455)t.FrameLayout.onMeasure(FrameLayout.java:310)位于android.view.view.measure(View.java:16497)android.view的android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) .ViewGroup.measureChildWithMargins(ViewGroup.java:5125)位于android.view.measure.View.measure(View.java:16497)的android.view.FreeLayout.onMeasure(FrameLayout.java:310),位于android.view.ViewGroup.measureChildWithMargins( ViewGroup.java:5125)在android.view.measure.View.measure(View.java:16497)的android.widget.FrameLayout.onMeasure(FrameLayout.java:310)android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) )在Android.widget.Lineout.measureVertical(LinearLayout.java:695)的android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)android.view上的android.widget.LinearLayout.onMeasure(LinearLayout.java:588) .View.measure(View.java:16497)位于android.widget.FrameLayout.onMeasure(FrameLayout.java:310)的android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)在com.android.internal.policy.impl.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2291)的android.view.View.measure(View.java:16497)在android.view.ViewRootImpl.performMeasure(ViewRootImpl.java) :1912)在android.view.ViewRootImpl.measureHversy(ViewRootImpl.java:1291)的android.view.ViewRootImpl.measureHversal(ViewRootImpl.java:1291)android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996) .view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:5600)在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:761)的android.view.Choreographer.doCallbacks(Choreographer.java:574).在android.view.Handler的android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:747)的android.O. .dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java:136)

android android-layout android-fragments android-viewpager

20
推荐指数
1
解决办法
2093
查看次数

当AppTheme为半透明时,软键盘与EditTextPreferenceDialogFragmentCompat重叠

运用

  • 最新的V14偏好支持库.

  • API上的半透明主题 > 19

  • EditTextPreferenceCompatPreferenceFragmentCompat

问题

点击EditTextPreferenceCompat之后弹出EditTextPreferenceDialogFragmentCompat,其中控件与软键盘重叠,这是错误的:

在此输入图像描述

  • 如果我使用半透明主题或API <19 - 一切都很好.
  • 如果我使用正常DialogFragment 半透明主题-一切都很好.

我尝试了什么?

有什么解决方法吗?

android android-preferences android-fragments

13
推荐指数
1
解决办法
302
查看次数

JsonSubTypes,多态对象列表和Parcelable

我的JSON结构:

{  
     ...
     "type":"post", // Type could vary
     "items":[]     // Array of items, each item is typeOf("type") 
     ...
}  
Run Code Online (Sandbox Code Playgroud)

如何items在我的POJO中反序列化并正确包裹列表:

public class ItemsEnvelope {
    private String type;

    @JsonTypeInfo(
            use = JsonTypeInfo.Id.NAME,
            include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
            property = "type",
            visible = true)
    @JsonSubTypes({
            @JsonSubTypes.Type(value = A.class, name = "A"),
            @JsonSubTypes.Type(value = B.class, name = "B"),
            @JsonSubTypes.Type(value = C.class, name = "C")
    })
    private List<Item> items;

    interface Item extends Parcelable {}

    class A implements Item {
        // Bunch of getters/setters and …
Run Code Online (Sandbox Code Playgroud)

android json jackson

12
推荐指数
1
解决办法
1360
查看次数

实现重试时的逻辑

我有一个应用程序,需要会话(cookie)来处理网络电话.我正在使用Retrofit+RxJava.但是,会话可能会过期(使用401 Unauthorized状态进行Retrofit错误)并且我想重新进行身份验证(以获取新的cookie)并在此情况下重试之前的呼叫.我该怎么做RxJava

我的例子:

getServerApi().getDialogs(offset, getCookies())
     .subscribeOn(Schedulers.newThread())
     .observeOn(AndroidSchedulers.mainThread())
     .retryWhen(observable -> {...}) // Need some logic
     .subscribe(dialogsEnvelope -> getView().setDialogs(dialogsEnvelope),
                throwable -> getView().setError(processFail(throwable)));
Run Code Online (Sandbox Code Playgroud)

session android rx-java retrofit

7
推荐指数
2
解决办法
1577
查看次数

使用Jackson反序列化包装列表

我有一个像这样的JSON对象:

{"geonames":[
   {"countryId":"2017370",
    "adminCode1":"73"},
   {"countryId":"2027370",
    "adminCode1":"71"},
    ...]}
Run Code Online (Sandbox Code Playgroud)

我怎样才能反序列化该对象List<GeoName>,忽略所述第一层(GEONAMES包装器),而不是反序列化到含有包装对象List<GeoName>@JsonProperty("geonames")

java json list jackson

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