私はRuby on Railsで構築した有効なWebApiを持っています。私はこのWebAPIにエントリを持っています。@ GETリクエストで正常にリストアップしてアクセスできますが、AndroidからWebAPIに新しいエントリをPOSTできません。AndroidからRuby on RailsへのPOST retrofit2を使用したWebAPI
さらに、POSTMANというアプリケーションからWebAPIへのエントリをPOSTできます。私のWebApiインターフェイスで定義されているようにcreateCourseメソッドを呼び出そうとすると、WebApiログには呼び出しの証拠が表示されません。
リクエストが明らかに最初に送信できなかったという事実が私を混乱させますが、いずれの場合でも問題は私が私のレトロフィットPOSTと呼んでいると思います。私はthisのポスターにも同様の問題があることを認識していますが、彼のプロジェクトの構造は私とは十分に異なっています。私WEBAPIインタフェースで
は、ここで私は、アプリケーションのクラスを持って作業@GETと 私WEBAPIインターフェースでも//CREATE
@Headers("Content-type: application/json")
@POST("/courses/create/")
Call<Course> createCourse(@Body Course CourseName);
//LIST
@GET("/courses")
Call<List<Course>> getCourses();
、私は
public static class Course {
public void setName(String name) {
this.name = name;
}
public void setLocation(String location) {
this.location = location;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
@SerializedName("name") private String name;
@SerializedName("location") private String location;
@SerializedName("startDate") private String startDate;
@SerializedName("endDate") private String endDate;
public String getName() {
return name;
}
public String getLocation() {
return location;
}
public String getStartDate() {
return startDate;
}
public String getEndDate() {
return endDate;
}
}
次ている機能不全@POSTであることアプリケーションを拡張し、無関係なものの中には、以下が含まれています。
public WebApi getWebApi() {
if (webApi == null) {
webApi = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("https://validurl.com") //i plug in something valid in implementation
.build()
.create(WebApi.class);
}
return webApi;
}
acti私は@GETリクエストを呼び出すVITYが、それは私が@GETを呼ぶ活動で、この
Observable.just(getApi().getCourses())
.subscribeOn(Schedulers.io())
.map(x -> {
try {
return x.execute();
} catch (IOException ex) {
throw new RuntimeException(ex);
}
})
.map(x -> x.body())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(x -> {
adapter.updateCourses(x);
}, ex -> {
});
のように見える、私は「アダプタ」ビットは私の質問には無関係である
public WebApi getApi() {
return ((App) getApplication()).getWebApi();
}
を定義していますそれは私のローカルデータベースに関係しているので、うまくいきます!私は(非稼働)@POSTを呼び出す
は、それは、私が(公平を期すためにPOSTを試してみて、送信するには、以下の(どちらも仕事)のいずれかを使用し、それを実行した後、この
WebApi.Course onlinecourse = new WebApi.Course();
onlinecourse.setName(localcourse.name());
onlinecourse.setLocation(localcourse.location());
onlinecourse.setStartDate(localcourse.start_date());
onlinecourse.setEndDate(localcourse.end_date());
のように見えます
((App) getApplication()).getWebApi().createCourse(onlinecourse);
OR
Observable.just(((App) getApplication()).getWebApi().createCourse(onlinecourse))
.subscribeOn(Schedulers.io())
.map(x -> {
try {
return x.execute();
} catch (IOException ex) {
throw new RuntimeException(ex);
}
})
.map(x -> x.body())
.observeOn(AndroidSchedulers.mainThread())
;
)私の代わりに鋳造後のAppクラスに1つのネイティブを使用してのここで私の他の場所で定義されたgetWebApi()メソッドを使用する必要がありますが、結果は同じです
私はこの呼び出しがうまく動作しない場所だと思います。たぶん、どのように改造が動作するのか分からないかもしれませんが、JSONとしてオブジェクトを送信する方法を考えました。私はこれが本当であるかどうか、それを確認する方法、または最初に私のAPIにPOST要求が送信されていないように見える理由がわかりません(GETのようにログには表示されません)
アプリがクラッシュしますか?コールは例外をスローしますか?私はRetrofit.Builder()が表示されません。addCallAdapterFactory(RxJavaCallAdapterFactory.create()) –
addCallAdapterFactory行を追加しようとします。つまり、アプリはクラッシュしたり、目に見える例外をスローしたりすることはありません。コールが決して行われなかったり、コールが有効であるように動作しますが、WebApiには決して到着しません。 –
retrofit2.Retrofitとretrofit2.converter.gson.GsonConverterFactoryをインポートしてretrofit2。*を試みましたが、RxJavaCallAdapterFactoryが認識されません –