【问题标题】:Capturing List response for a Retrofit Call with Json body使用 Json 正文捕获改造调用的列表响应
【发布时间】:2018-06-11 20:30:54
【问题描述】:

全部。

我正在尝试使用 Retrofit 将原始 json 作为 POST 请求中的主体发送到服务器。

@POST("api/apps")
Call<List<GetApps>> getApp(@Body GetApps body);

我已经使用 jsontopojo 为返回的响应构建了模型。

在我的调用中,我放置了构造函数、getter 和 setter 以及 toString()。

这是我的改造电话。

        Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl(APIUrl.BASEURL)
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();

        APIService apiService = retrofit.create(APIService.class);

        Call<List<GetApps>> call = apiService.getApp();

        call.enqueue(new Callback<List<GetApps>>() {
            @Override
            public void onResponse(Call<List<GetApps>> call, Response<List<GetApps>> response) {
                List<GetApps> GetApps2 = response.body();


                Toast.makeText(getApplicationContext(),"success", Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onFailure(Call<List<GetApps>> call, Throwable t) {
                Toast.makeText(getApplicationContext(),"Failure", Toast.LENGTH_SHORT).show();


            }
        });

我在这一行遇到错误:

Call<List<GetApps>> call = apiService.getApp();

它说 getApp(getApps) 不能应用于 ();不知道应该在 () 中输入什么;

【问题讨论】:

  • 你的getApp方法中没有传递参数jsonObject
  • 请同时回复
  • @SubinBabu 在 Android Studio 中显示错误,所以我什至无法发送请求,甚至无法运行应用程序。
  • @AbhayBohra 请请求您的 API 使用邮递员并在此处获取响应和更新。
  • 我发送的邮递员请求具有正确的 json 正文,它给了我正确的响应。我面临的问题是在应用程序的 Activity 中制定请求。

标签: android json arraylist retrofit retrofit2


【解决方案1】:

您必须将GetApps 对象作为参数传递:

GetApps getApps = new GetApps();
//set all your data on getApps
//getApps.setYourData(yourData);
Call<List<GetApps>> call = apiService.getApp(getApps);

【讨论】:

  • 我应该设置什么数据?我作为请求正文的一部分或将作为响应返回的 json 对象列表发布的那个。
  • 所以您没有传递请求正文? GetApps 用于处理 API 的响应体?
  • getApps 有什么用?是请求正文还是响应正文?因为如果我按照你说的做,就是希望我把响应体属性放在里面。
  • 您将@Body GetApps 设置为请求正文,因为它在参数上。另外,您还可以使用与Call&lt;List&lt;GetApps&gt;&gt; getApp 上的响应正文相同的对象。我澄清你实际上想要做什么。我已经按照您的指示解决了您的错误。
  • GetApps getApps = new GetApps(name, place, time); Call&lt;List&lt;GetApps&gt;&gt; call = apiService.getApp(getApps); 我已经有了这条线,但注释掉了,看起来它正在等待我的响应正文参数。这就是让我困惑的地方。
【解决方案2】:

你提出要求

@POST("api/apps")
Call<List<GetApps>> getApp(@Body GetApps body);

它将接受将附加到 URL 的正文。

只需在getApp(@Body GetApps body); 中添加正文 // 接受 JSON 字符串作为参数。

编码愉快!!

【讨论】:

  • Call&lt;List&lt;GetApps&gt;&gt; call = apiService.getApp(@Body GetApps body); 当我这样做时,我得到 2 个错误。 1.这里不允许注释。 2. 无法解析符号主体。但这正是我在界面内创建请求时放置的内容。
【解决方案3】:

在 Post 的顶部添加 @FormEncodedUrl 并将 GetApp 模型作为正文传递... Call&lt;List&lt;GetApps&gt;&gt; call = apiservice.getApp(getAppOne);

【讨论】:

  • 我不认为我可以添加 @FormEncodedUrl,因为这是 URL 的原始 JSON 正文帖子。如果我使用@FormEncodedUrl,那么我的请求将不起作用,因为在服务器端,我正在解析我的 json 并在 json 正文中提取信息。
猜你喜欢
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 2015-07-18
  • 2019-07-13
  • 2018-01-29
  • 2019-03-14
  • 1970-01-01
相关资源
最近更新 更多