2015-11-08 145 views
0

strong text我试图实现基本用户注册。 我正在使用RxJava和翻新(v2测试版)。retrofit.HttpException:HTTP 400错误的请求android(关闭)

URL: http://momento-w03d.c9users.io/register 
Fields 
username 
password 
fullname 
email 

当我使用邮递员送这4个领域的表单数据 的回应是:["success"]

有我做错了,或者是因为我使用CLOUD9服务器的东西。

我是新来改造,我无法理解我犯了什么错误。 非常感谢您的时间。

类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); 
} 

Model类消息

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()); 
         } 
        }); 

堆栈跟踪

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) 
+0

方法主体是你想注册相同的使用一遍又一遍? – Blackbelt

+0

没有。在这种情况下,服务器回复此Json '用户名':[ “用户名已被占用。” ], “电子邮件”:[ “电子邮件已被采纳。” ] }' –

回答

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; 
    } 
} 
+0

'java.lang.IllegalArgumentException:@Body参数不能与表单或多部分编码一起使用。' –

+0

@Harsh查看我的编辑(删除了@ @ FormUrlEncoded') – LordRaydenMK

+0

感谢您的帮助。错误来自服务器端。 –