我正在尝试实现基本用户注册。我正在使用RxJava和改造(v2 beta)。
URL: http://momento-w03d.c9users.io/register
Fields
username
password
fullname
email
[当我使用邮递员将这4个字段作为表单数据发送时响应是:["success"]
是我在做错什么事,还是因为我在使用cloud9服务器?
我是新手,我无法理解我在哪里犯了错误。非常感谢您的宝贵时间。
Class
AuthServiceFactory
public class AuthServiceFactory {
private static Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(AuthService.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create());
public static <S> S createService(Class<S> clazz) {
final Retrofit retrofit = builder.build();
S service = retrofit.create(clazz);
return service;
}
}
接口
AuthService
public interface AuthService {
String BASE_URL = "http://momento-w03d.c9users.io";
@FormUrlEncoded
@POST("/register")
Observable<Message> register(@Field("username") String username,
@Field("password") String password,
@Field("email") String email,
@Field("fullname") String fullname);
}
模型类别
Message
public class Message {
private String message;
public String getMessage() {
return message;
}
}
发送请求的方法主体
AuthService authService = AuthServiceFactory.createService(AuthService.class);
authService.register("lorem", "12345678", "[email protected]", "lorem imposium")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Message>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Message message) {
System.out.println(message.getMessage());
}
});
StackTrace
W/System.err: retrofit.HttpException: HTTP 400 Bad Request
W/System.err: at retrofit.RxJavaCallAdapterFactory$SimpleCallAdapter$1.call(RxJavaCallAdapterFactory.java:163)
W/System.err: at retrofit.RxJavaCallAdapterFactory$SimpleCallAdapter$1.call(RxJavaCallAdapterFactory.java:158)
W/System.err: at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:55)
W/System.err: at retrofit.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:113)
W/System.err: at retrofit.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:88)
W/System.err: at rx.Observable$2.call(Observable.java:162)
W/System.err: at rx.Observable$2.call(Observable.java:154)
W/System.err: at rx.Observable$2.call(Observable.java:162)
W/System.err: at rx.Observable$2.call(Observable.java:154)
W/System.err: at rx.Observable.unsafeSubscribe(Observable.java:7710)
W/System.err: at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62)
W/System.err: at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err: at java.lang.Thread.run(Thread.java:818)
public interface AuthService {
String BASE_URL = "http://momento-w03d.c9users.io";
@POST("/register")
Observable<Message> register(@Body RegisterBody body);
}
public class RegisterBody {
String username;
String password;
String fullname;
String email;
public RegisterBody(String username, String password, String fullname, String email) {
this.username = username;
this.password = password;
this.fullname = fullname;
this.email = email;
}
}