改进2.0-Beta1从Observable读取响应

时间:2015-09-18 13:40:48

标签: android response retrofit

我正在尝试在请求的成功案例中阅读httpstatus代码e body。所以我创建了下面的代码进行测试,但是我没有调用<a ng-href="{{::context.helpers.links.user(item.author, context.helpers.me)}}"... ,我尝试使用 okhttp (com.squareup.okhttp.Response)和改进响应< / strong>(retrofit.Response)课程,但我无法使其发挥作用。

有人可以帮我在这里阅读正文和httpstatus代码吗?我想继续使用Observables。 提前谢谢。

onNext

4 个答案:

答案 0 :(得分:5)

我得到了答案。

import com.squareup.okhttp.ResponseBody;
import retrofit.Response;

...

public Observable<Response<ResponseBody>> xxx(){}
...

Playlist playlist = Playlist.parse(((ResponseBody)response.body()).byteStream());

实际上,response.body()是一个Object,你可以将它转换为另一种类型。在这种情况下,它是ResponseBody。

答案 1 :(得分:4)

我使用下面的代码,需要使用 retrofit.Response 的泛型与 ResponseBody

package com.app.rest;


import com.squareup.okhttp.ResponseBody;

import retrofit.GsonConverterFactory;
import retrofit.Response;
import retrofit.Retrofit;
import retrofit.RxJavaCallAdapterFactory;
import retrofit.http.GET;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class TestApiClient {
    public interface Test {
        @GET("/posts")
        Observable<Response<ResponseBody>> getPosts();
    }

    public TestApiClient() {
        new Retrofit.Builder()
                .baseUrl("http://jsonplaceholder.typicode.com")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build().create(Test.class).getPosts().subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<Response<ResponseBody>>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {
                e.toString();
            }

            @Override
            public void onNext(Response<ResponseBody> response) {
                response.toString();
            }
        });
    }
}

答案 2 :(得分:2)

您需要将界面的Observable定义为

@GET("/posts") Observable<Result<MyPost>>

然后您可以轻松地在 onNext()中获取响应正文:

@Override
public void onNext(Result<MyPost> result) {
    result.response().body();
}

答案 3 :(得分:1)

有时,response.toString()或response.body()为你提供了不可读的字符串,我必须从响应体中获取字节并从中构造一个新的字符串。

@Override
public void onNext(Response<ResponseBody> response) {
    try {
        String responseStr = new String(response.body().bytes());
        Log.d("responseBodyResponse", responseStr);
    } catch (Exception e) {
        Log.d("responseBodyResponse Exception", e.getMessage());
    }

}