对Retrofit2调用响应体返回值的访问



作为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

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

如有任何提示或帮助,我将不胜感激。

这是我的Retrofit Call:

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;
}*/
}
再次,任何提示或帮助将非常感激,因为我被困在这里,提前感谢!

正如@Chirag Rayani所提到的,您应该在api定义和调用中拥有pojo。所以你应该像这样写:

MessageApi:把

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

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

call也是一样:

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) {
...
}
});

最新更新