【问题标题】:Create a get request via retrofit android通过改造 android 创建一个获取请求
【发布时间】:2018-07-24 07:29:09
【问题描述】:

我有一个应用程序,我必须在其中获取收入消息列表,这些消息将被分类到Listview。我从服务器开发人员那里得到了我的GET 请求的一些详细信息:

HTTP 200
{
    "count": int, # number of messages 
    "messages": [ # array of messages
        {
            "id": int, # message id
            "subject": str, # message subject
            "can_delete": int, # can it be deleted (1) or not (0)
            "new": int # message already read (0) or not (1)
            "date": str, # date of message in 'd.m.y'. If message was sent today format will be 'H:M'
            "receiver_name": str, # name of receiver if type=1
            "sender_name": str, # name of sender if type=0
        }, ...
    ],
    "next_url": URL,  # url for get next messages, if no more messages value is null
    "previous_url": URL # url for get previous messages, if no more messages value is null
}

现在我创建了一个Interface

 @Headers("Content-type: application/json")
    @GET("/v1/message/list?type=TYPE")
    Call<List<IncomeMessages>> getInMess(@Query("count") String count,
                                         @Query("messages") String messages,
                                         @Query("id") Integer id,
                                         @Query("subject") String subject,
                                         @Query("new") Integer new_m,
                                         @Query("date") String date,
                                         @Query("receiver_name") String receiver_name,
                                         @Query("sender_name") String sender_name,
                                         @Query("next_url") URL next_url,
                                         @Query("previous_url") URL previous_url);

然后我创建了一个简单的Class 请求:

public class IncomeMessages
{
    @SerializedName("subject")
    private String subject;
    @SerializedName("date")
    private String date;
    @SerializedName("sender_name")
    private String sender_name;
    @SerializedName("receiver_name")
    private String receiver_name;

    public IncomeMessages(String sender_name, String date, String receiver_name, String subject) {
        this.sender_name = sender_name;
        this.date = date;
        this.receiver_name = receiver_name;
        this.subject = subject;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getSender_name() {
        return sender_name;
    }

    public void setSender_name(String sender_name) {
        this.sender_name = sender_name;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getReceiver_name() {
        return receiver_name;
    }

    public void setReceiver_name(String receiver_name) {
        this.receiver_name = receiver_name;
    }
}

现在我不知道如何从server 中获取所有这些parameters 并将其分类为Listview。我也有request:curl -i -X GET -H "Content-Type:application/json" -H "Authorization:Bearer $ACCESS_TOKEN"https://server/v1/message/list?type=TYPE 的样本我是Retrofit 请求的初学者,也许以前有人解决过类似的问题。所以我认为你会帮助我解决以下问题。 (对不起我的英语不好:)

【问题讨论】:

  • 你只会得到你在改造请求中在类中声明的变量,作为响应,所有数据都在那里,但你使用的类没有所有变量
  • 是的,我明白了,但是我不明白如何在mainactivity类中初始化下面的接口和请求类???

标签: android client client-server retrofit retrofit2


【解决方案1】:

这可能会帮助您如何在 Ratrofit 的 MainActivity 中编写代码。

Retrofit 会在后台线程下载并解析 API 数据,然后通过 onResponse 或 onFailure 方法将结果返回给 UI 线程。

ApiInterface apiService =
            ApiClient.getClient().create(ApiInterface.class);

    Call<ResponceClass> call = apiService.getyourInterfacemethod(); /* Here Define Mathod Name as Same as Define in Interface and Pass here Your Interface @GET or @POST Method Parameter value */
    call.enqueue(new Callback<ResponceClass>() {
        @Override
        public void onResponse(Call<ResponceClass>call, Response<ResponceClass> response) {
            //Handle Api Response Here.

            List<String> list = response.body().getResults();   /* Make Your List or Something You Want to do As Your Requirement. */
            Log.d(TAG, "Number of List Record received: " + list.size());
        }

        @Override
        public void onFailure(Call<ResponceClass>call, Throwable t) {
            // Log error here since request failed
            Log.e(TAG, t.toString());
        }
    });

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 2018-02-16
    • 2021-05-19
    • 2018-07-24
    • 2020-01-13
    • 2016-12-08
    • 2015-11-25
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多