私はAndroid用クライアント/サーバアプリケーションを作成しています。私には問題があり、それを追跡することはできません。ポイントはこれです: 私はAPIメソッドを持っています。 Retrofit 2を使用して、POST要求をデバイスから送信します(ただし、サーバー上でREQUEST配列を使用するため、メソッドは無関係で、同じGETを使用しようとしました)。メソッドはフォーラムにメッセージを投稿することを前提としています。その結果、2回置かれ、時間は1秒に一致します。私はログからリクエストを受け取り、デバイス上に表示されたユーザーエージェントなどのブラウザから送信すると、すべて正常に動作します.1つの投稿のみが公開されます。Android。クライアント/サーバアプリケーションでは、メッセージがクライアントから投稿されたときに複製されます。
改修方法:
@FormUrlEncoded
@POST("api/index.php?m=topic&action=send")
Observable<ApiResponse> sendPost(@Field("id_topic") long id,
@Field("subject") String subject,
@Field("message") String text);
メソッドの呼び出し:
public void sendPost(String subj, String text) {
Subscription subscription = model.sendPost(args.getLong("topic_id"), subj,
text)
.subscribe(new Observer<ApiResponse>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
try {
Log.e("Post wrong", "Error while posted message: " + e.getMessage());
activityCallback.makeToast("Message not published, an error occurred");
} catch (NullPointerException e1) {
Log.e("Error:", "getMessaage() or activityCallback is null");
}
}
@Override
public void onNext(ApiResponse apiResponse) {
try{
activityCallback.makeToast("Message successfully published");
} catch (NullPointerException e) {
Log.e("Error:", "activityCallback is null");
}
reload();
}
});
addSubscription(subscription);
}
のonClick:
@OnClick(R.id.sendButton)
public void send() {
if (sendText.getText() == null
|| sendText.getText().toString().trim().isEmpty()){
makeToast("Введите текст публикации");
return;
}
presenter.sendPost("Re: Тестовая тема", sendText.getText().toString());
}
onClickのは、正確に1回だけ呼び出されます。見たログでは、要求は一度同じ方法で送信されます。何が問題なの? お願いします。
あなたは 'addSubscription(subscription)'メソッドのコードも投稿できますか? – Schlangguru
私は私の問題を解決しました、ありがとう! –