retrofit.HttpException:HTTP 400错误的请求android(关闭)

问题描述 投票:0回答:1

我正在尝试实现基本用户注册。我正在使用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)
android retrofit rx-java
1个回答
1
投票
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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.