我是新來的使用Retrofit並從Retrofit 2.1.0開始。 我得到respose 200 OK,但在我的call.enqueue
總是運行onFailure()
,邏輯上它必須運行onResponse()
。我真的不知道爲什麼,並搜索相同的問題,但他們的解釋不能解決我的問題。有人可以拯救我的一天...?Retrofit 2.1.0 onFailure()在respose 200時調用OK
我有一個帖子到我的DB與API
@FormUrlEncoded
@POST("/api/v1/meetups/")
Call<Result<Meeting>> createMeeting(@Field("name") String name,
@Field("date_start") String date_start,
@Field("date_ended") String date_ended,
@Field("location") String location,
@Field("latitude") Double latitude,
@Field("longitude") Double longitude,
@Field("points") Integer points,
@Field("member_ids") String member_ids);
這是我在我的活動是如何運行
Call<Result<Meeting>> call = mClient.createMeeting(meeting.getName(), meeting.getDate_start(), meeting.getDate_ended(),
meeting.getLocation(), meeting.getLatitude(), meeting.getLongitude(), meeting.getPoints(), meeting.getMember_ids());
Log.e("URL",String.valueOf(call.request().hashCode()));
call.enqueue(new Callback<Result<Meeting>>() {
@Override
public void onResponse(Call<Result<Meeting>> call, Response<Result<Meeting>> response) {
Log.e("Response Code", String.valueOf(response.code()));
if (response.isSuccessful()) {
Log.e("Meeting ", "Dibuat");
Toast.makeText(getApplicationContext(), "Meeting Created", Toast.LENGTH_SHORT).show();
Intent i = new Intent(mContext, MainActivity.class);
mContext.startActivity(i);
((Activity) mContext).finish();
} else {
Toast.makeText(getApplicationContext(), "Create Meeting Failed", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "Response Error: HTTP Code " + String.valueOf(response.code()),
Toast.LENGTH_SHORT).show();
Log.e(TAG + "onResponse", String.valueOf(response.raw().toString()));
}
}
@Override
public void onFailure(Call<Result<Meeting>> call, Throwable t) {
Log.e("On Failure", "Working");
}
});
這裏是我的會議模式
public class Meeting {
private String _id;
private String name;
private String date_start;
private String date_ended;
private String status;
private String location;
private String member_ids;
private Double latitude;
private Double longitude;
private Integer points;
private Group group;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
...
...
}
的問題是當我在我的會議中故意輸入錯誤的屬性時,它返回錯誤代碼500和onResponse()
正在工作,給response.isSuccessful() == false
和Log.e()
輸出是「創建會議失敗」。但是,當我輸入正確的屬性,它給我的數據庫200 OK,POST,但onFailure()
正在運行並運行Log.e()
「失敗:工作」。
第一,'isSuccessful()'返回TRUE如果狀態代碼是' 2xx..3xx'。在你的情況下,這個評估是錯誤的,所以我很好奇狀態碼可能是什麼。 另外,後續的'response.message()'揭示了什麼? – sschrass
@sschrass我用'Log.e(「On Failure」,t.getMessage())編輯我的代碼以在'onFailure()'獲得消息;'並且我得到消息'On Failure:java.lang.IllegalStateException:預期的BEGIN_OBJECT,但BEGIN_ARRAY在第3行第12列路徑$ .data' –
您正在使用JsonArray而解析或綁定數據使用JsonObject – YoLo