【问题标题】:Access to Return value in Response Body from Retrofit2 Call从 Retrofit2 调用访问响应正文中的返回值
【发布时间】:2021-03-10 19:17:18
【问题描述】:

作为 Retrofit2 的新手并且在处理来自调用的响应主体时遇到问题 - 所需的响应在 Android Studio 调试器中可见,数据就在那里;但是,由于缺乏Java技能, 我不清楚如何访问我收到的数据。看起来需要类型转换。

数据看起来像这样 -

Log.d(TAG, "messageId" + addBookingMessageList.toString());

给我

messageIdcom.example.xxx.AddBookingMessage@88fe1de

Log.d(TAG, "addBookingMessageList Class" + addBookingMessageList.getClass().getName());

返回

addBookingMessageList Classjava.lang.String

如何正确解析这些数据?我知道它是一个对象,但它是 我不清楚如何访问对象属性。

任何提示或帮助将不胜感激。

这是我的改造电话:

  public static void putBookingOnPallet(String basic,
                                      AddBookingMessage message, Context mContext) {

    MessagesApi messageApi = retrofit.create(MessagesApi.class);
    //making the call objects
    Call<AddBookingMessage> call = messageApi.addBooking(basic, message);

    //call.execute();

    call.enqueue(new Callback<AddBookingMessage>() {
        @Override
        public void onResponse(@NonNull Call<AddBookingMessage> call, @NonNull
                Response<AddBookingMessage> response) {

            if (response.isSuccess()) {
                Object addBookingMessageList;
                addBookingMessageList = response.body().toString();
                Log.d(TAGGG, (String) addBookingMessageList.toString());
                Log.d(TAG, "messageId" + addBookingMessageList.toString());
                Log.d(TAG, "addBookingMessageList Class" + addBookingMessageList.getClass().getName());
                //Toast.makeText(context, statusCode, Toast.LENGTH_LONG).show();
            }
            else {
                int statusCode = response.code();
                Log.d(TAG, "statusCode" + statusCode);

            }
        }


        @Override
        public void onFailure(Call<AddBookingMessage> call, Throwable t) {
            Log.d(TAG, "t.getMessage" + t.getMessage());
            Toast.makeText(mContext, t.getMessage(), Toast.LENGTH_LONG).show();
        }
    });
}

这是我的 MessagesAPI:

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Header;
import retrofit2.http.Headers;
import retrofit2.http.POST;


public interface MessagesApi {

    String BASE_URL = "xxx";

    @POST("message")
    @Headers({ "Content-Type: application/json;charset=UTF-8"})
    Call<AddBookingMessage> addBooking(
            @Header("Authorization")
                    String basic,
            @Body AddBookingMessage message
    );

    @POST("message")
    @Headers({ "Content-Type: application/json;charset=UTF-8"})
    Call<AddBookingMessage> removebooking(
            @Header("Authorization")
                    String basic,
            @Body AddBookingMessage message
    );
}

这是我的 Pojo:

package xxx;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class AddBookingMessage {

    @SerializedName("type")
    @Expose
    private String type;
    @SerializedName("time")
    @Expose
    private Integer fromID;
    @SerializedName("fromID")
    @Expose
    private Integer toID;
    @SerializedName("toID")
    @Expose
    private Integer typeID;
    @SerializedName("typeID")
    @Expose
    private String title;
    @SerializedName("title")
    @Expose
    private String receiptNo;
    @SerializedName("receiptNo")
    @Expose
    private String note;
    @SerializedName("note")
    @Expose

/*    private String id;
    @SerializedName("id")
    @Expose*/

    private Long time;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void getTitle(String title) {
        this.title = title;
    }

    public Integer getFromId() {
        return fromID;
    }

    public void setFromId(Integer fromID) {
        this.fromID = fromID;
    }

    public Integer getToID() {
        return toID;
    }

    public void setToId(Integer toId) {
        this.toID = toId;
    }

    public Integer getTypeId() {
        return typeID;
    }

    public void setTypeId(Integer typeID) {
        this.typeID = typeID;
    }
    public String getReceiptNo() {
        return receiptNo;
    }

    public void setReceiptNo(String receiptNo) {
        this.receiptNo = receiptNo;
    }
   public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note;
    }

    public Long getTime() {
        return time;
    }

    public void setTime(long time) {
        this.time = time;
    }

    /*public String getId() {
            return id;
    }

    public void setId(String id) {
        this.id = id;
    }*/
}

再次感谢任何提示或帮助,因为我被困在这里,提前致谢!

【问题讨论】:

  • 能否在改造构建器addConverterFactory(GsonConverterFactory.create())中确认是否添加了这个
  • @KishanMaurya:是的,我可以肯定地确认,addConverterFactory(GsonConverterFactory.create()) 在改造构建器中
  • 你有响应json的样本吗?
  • @MidasLefko:是的,响应正文如下所示:“id”->“15001”“type”->“unbekannt”“date”->“2021-03-10”“no " -> "24999" "title" -> "Neue Warenbuchung" "note" -> "" - 我是从 Android Studio 调试器中的响应中获取的,因为这是我需要解析的响应。我实际上只需要 ID(15001)。我怎样才能得到它?
  • 嘿,您正在使用 Object 作为 Call 的返回类型,即 Call 。尝试使用您的数据类作为返回类型,因为我可以看到您已经创建了数据类 AddBookingMessage,将其用作 Call 并尝试

标签: java android retrofit retrofit2


【解决方案1】:

正如@Chirag Rayani 所提到的,您应该在 api 定义和调用中包含您的 pojo。所以你应该有类似的东西:

消息接口: 改变

Call<Object> addBooking(headers, etc...);

Call<AddBookingMessage> addBooking(headers, etc...);

通话也一样:

Call<AddBookingMessage> call = messageApi.addBooking(basic, message);

call.enqueue(new Callback<AddBookingMessage>() {
            @Override
            public void onResponse(@NonNull Call<AddBookingMessage> call, @NonNull
                    Response<AddBookingMessage> response) {

                if (response.isSuccess()) {
                    // use your object here
                    Log.v("response", "id " + response.body().getId());
                    ...
                }
            }

            @Override
            public void onFailure(Call<AddBookingMessage> call, Throwable t) {
                ...
            }
        });

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    相关资源
    最近更新 更多