Retrofitを使用してRetrofit 2.1.0を使用するのは初めてです。 私は200 OKを返すが、私のcall.enqueue
はいつもonFailure()
を実行し、論理的にはonResponse()
を実行しなければならない。私は本当になぜ知りませんし、同じ問題を検索しますが、その説明は私の問題を解決しません。誰かが私の日を救うことができます...?Retrofit 2.1.0 onFailure()が呼び出されている間に呼び出されます。200 OK
私はこれは私がここで私の活動に
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");
}
});
を実行する方法です
@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);
APIと私のDBへのPOSTを持っているが、私の会議のモデルである
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()
の出力が「ミーティングの作成に失敗しました」です。しかし、私は右の属性を入力すると、それは私のDBに200 OK、POSTを与えますが、onFailure()
が働いていて、Log.e()
"失敗した場合:動作中"を実行します。あなたを助けるかもしれ
Result<List<Meeting>>
にを変更する必要が注:このようなあなたの電話を使用することができます
2xx..3xx'。あなたの場合、これは偽と評価されるので、私は状態コードが何であるか不思議です。 さらに、後続の 'response.message()'は何を示していますか? – sschrass
@sschrass 'onFailure()'で 'Log.e(" On Failure "、t.getMessage());でメッセージを取得するコードを編集し、' On Failure:java.lang.IllegalStateException: BEGIN_OBJECTは期待されていましたが、3行目の12行目のBEGIN_ARRAYでした。path $ .data' –
解析やデータのバインド中にJsonArrayを使用しています。 – YoLo