2015-11-08 183 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

感謝您的幫助。錯誤來自服務器端。 –