当前位置: 首页 > 知识库问答 >
问题:

使用Rxjava2的改型2发送GET请求,获取空对象

相温文
2023-03-14

我知道以前有几个人问过这个问题,但我已经尝试了这些答案。我是Android新手。一切看起来都很好,但我不明白为什么我会得到一个空对象?有人可以指导我吗?

接口:

public interface CryptoAPI {
@GET("ActivityForTestingPurposeOnly/")
io.reactivex.Observable<List<Stream>> getData(@Query("Row") String Row,
                                             @Query("Top") String Top,
                                             @Query("AppID") String appid);

这是我的改装适配器:

public class RetrofitAdapter {
   private String BASE_URL = "http://m.ilmkidunya.com/api/sectionactivity/sectionactivity.asmx/"

   public static CryptoAPI newAPICreator() {
       final HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
       interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
       final OkHttpClient client = new OkHttpClient.Builder()
                                    .addInterceptor(interceptor)
                                    .build();

       Retrofit retrofit = new Retrofit.Builder()
             .client(client)            
             .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
             .addConverterFactory(GsonConverterFactory.create())
             .baseUrl(BASE_URL)
             .build();

            return retrofit.create(CryptoAPI.class);
        }
    }
}

最后,我得到响应的方法:

public void getStreams(){
  CryptoAPI.RetrofitAdapter.newAPICreator()
    .getData("0", "20", "73")
    .subscribeOn(Schedulers.io())
    .subscribeOn(AndroidSchedulers.mainThread())
    .subscribe(new Observer<Stream>() {
        @Override
        public void onSubscribe(Disposable d) {

        }

        @Override
        public void onNext(Stream model) {
                arrayList.add(model);                                  
                Toast.makeText(getApplicationContext(),
                               "Size: " + arrayList.size(),
                               Toast.LENGTH_SHORT);

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

        @Override
        public void onComplete() {

        }
    });
}

> here is my 



    @SerializedName("ID")
    @Expose
    private Integer iD;
    @SerializedName("Rating")
    @Expose
    private Integer rating;
    @SerializedName("SectionID")
    @Expose
    private Integer sectionID;
    @SerializedName("ContentID")
    @Expose
    private Integer contentID;

在这里,您可以在图像中看到

共有1个答案

柴衡
2023-03-14

总结

我测试了你给的endpoint一切正常

curl -X GET \
  'http://m.ilmkidunya.com/api/sectionactivity/sectionactivity.asmx/ActivityForTestingPurposeOnly?Row=0&Top=20&AppId=73' \
  -H 'Postman-Token: f64fdf34-4dbb-4201-93e9-e4c95fe7064d' \
  -H 'cache-control: no-cache'

回报是

{
    "stream": [
        {
            "ID": 583750,
            "Rating": 0,
            "SectionID": 59,
            "ContentID": 0,
            "SectionName": "Comments",
            "SortOrder": 2,
            "Title": "ICS",
            ...
        }
    ]
}

出了什么问题

您使用了可观察的

你需要做什么

已更新(基于用户问题更新)

像这样创建一个名为Stream的对象

public class Stream {
     @SerializedName("stream")
     List<StreamItem> streamItems; // <-- Array list of the stream items you have
}

创建一个名为StreamItem的对象,如下所示

public class StreamItem {
     @SerializedName("ID") // <- json key
     Int id;
     @SerializedName("Rating")
     Int rating;
     @SerializedName("SectionID") 
     Int sectionId;
     @SerializedName("ContentID")
     Int contentId;
     @SerializedName("SectionName")
     String sectionName;
     @SerializedName("Title")
     String title;
     ... // additional properties you need
}

然后像这样改变你的api服务接口

io.reactivex.Observable<Stream>

此外,如果您没有将rxjava2与旧的rxjava1或任何相关的可观察类一起使用,您可以直接在服务类的顶部大部分导入可观察

import io.reactivex.Observable

并像这样使用它

Observable<Stream>

这样做,使用我上面提供的模型对象

public interface CryptoAPI {
@GET("ActivityForTestingPurposeOnly/")
Observable<Stream> getData(@Query("Row") String Row,
                                             @Query("Top") String Top,
                                             @Query("AppID") String appid);

你就是这么叫它的

public void getStreams(){
  CryptoAPI.RetrofitAdapter.newAPICreator()
    .getData("0", "20", "73")
    .subscribeOn(Schedulers.io())
    .subscribeOn(AndroidSchedulers.mainThread())
    .subscribe(new Observer<Stream>() {
        @Override
        public void onSubscribe(Disposable d) {

        }

        @Override
        public void onNext(Stream stream) {
               // IMPORTANT NOTE:
               // Items return here in onNext does not mean the 
               // object you have (eg. each Stream's object in streams' list) 
               // it represents streams of generic data objects


               // This is where you can access the streams array
               arrayList.addAll(stream.streamItems) // <- notice the usage

               Toast.makeText(getApplicationContext(),
                               "Size: " + arrayList.size(),
                               Toast.LENGTH_SHORT);

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

        @Override
        public void onComplete() {

        }
    });
}

阅读更多关于

  • http://square.github.io/retrofit/(另请参见第一个示例中如何将array作为根对象解析Github Repos)
 类似资料:
  • 请求方式: "|3|1|url|\r" 参数: url 设置Get请求的url链接 返回值: "|3|code|data|\r" 参数: code http请求返回的成功或者错误码, 成功:code = 200 获取数据失败:code = -1 http请求字段错误:code = 1 data http请求返回的数据 Arduino样例: softSerial.print("|3|1|http:/

  • 我需要发送一个请求,如下所示 我使用以下代码,但它似乎没有发送一个正确的请求,因为响应对象是空的。我也想知道如何显示完整的url restTemboard发送?我知道WireShark可以使用,但有什么方法可以使用restTem板检索它吗? 密码

  • zendserver 2019.7 php 7.3 apache 2.4 在测试环境中,我通过curl向我的本地服务器发送JSON post请求。当CURLOPT_POSTFIELDS少于1000个字符时,它的脚本被执行,我得到的响应很好。 但是当我增加JSON数组的长度时,同样的脚本会出现404错误。 我已经改变了所有的配置,如post_max_size等,但没有任何效果。 }'; $ URL

  • 当我做POST请求调用使用JsonObjectRequest在凌空然后在某些wifi它是发送空的身体。但是它可以很好地处理StringRequest POST请求。它在所有移动网络上都运行良好。 我正在使用node。js服务器和expressjs/body解析器。当我使用邮递员发出邮件请求时,一切正常。 错误是什么?如果有人想看我能提供的代码。 使用StringRequest的POST请求 POS

  • 本文向大家介绍jsp+ajax发送GET请求的方法,包括了jsp+ajax发送GET请求的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ajax发送GET请求,然后通过jsp页面来接收处理的实现方法。分享给大家供大家参考。具体实现方法如下: Ajax发送GET请求 这里用一个实例演示Ajax发送get请求,实例具体要求为一个注册页面,当用户填写完用户名称时,该输入框失去焦点后会通过A

  • 问题内容: 我想将我的网址发送到(和)。 我当前的请求代码不起作用。 使用是 不是 一个容易回答。 问题答案: 在iOS中发送和请求非常容易。无需其他框架。 请求: 首先,将我们的(按需发送的内容)创建为,然后将其转换为。 目标 接下来,我们阅读的,因此我们可以将其传递给请求。 现在我们有了要发布的内容,我们可以创建一个,并包含我们的。 迅速 最后,我们可以发送请求,并通过创建新的请求来阅读回复: