2015-04-25 3 views
1

Я работаю над приложением, которое отправит пароль на сервер, чтобы проверить, правильно ли он, сервер вернет 0,1,2,3, представляющий разные статусы Я не где этот 400 плохих запросов исходит. Я позвонил на сервер и получил json-файл, но я подозреваю, что это то, как я его разбирал? Любая помощь очень ценится.Android Rest Api Post 400 bad request

UPDATE

обновление. Я понимаю, часть ошибки здесь заключается в том, что я пытаюсь отправить строку, не конвертируя ее сначала в файл JSON. Вот почему я получил «статус: 0», что означает, что произошла ошибка. Я преобразовал свою строку в объект RegisterRequest, который содержит строковую переменную. Теперь я получаю статус 2, который обозначает неправильный пароль. Однако мой плохой запрос 400 все еще остается. ПОЖАЛУЙСТА, любая помощь или предложение будет очень полезно для меня

@Headers("Content-Type: application/json") 
@POST("removed/{id}") 
RegisterResponse registerEvent(
    @Path("id") int ID, 
    @Body RegisterRequest password 
) throws NetworkException; 

RegisterResponse класс:

public class RegisterResponse { 
    public String status; 
} 

RegisterRequest класс

public class RegisterRequest { 

    String passcode ; 

    public RegisterRequest(String passcode) 
    { 
     this.passcode=passcode; 
    } 
} 

вызов к серверу:

try { 
    RegisterResponse response = NetworkHelper.makeRequestAdapter(this) 
       .create(testApi.class).register(ID, pass); 

     if(response.status=="1"||response.status=="3") 
     { 
      return true; 
     } 
     else 
      return false; 
    } catch (NetworkException e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

сделать запрос Адаптер код

private static RestAdapter.Builder makeRequestAdapterBuilder(final Context context, ErrorHandler errorHandler, String dateTimeFormat) 
    { 
     RequestInterceptor requestInterceptor = new RequestInterceptor() 
     { 
      @Override 
      public void intercept(RequestInterceptor.RequestFacade request) 
      { 
       request.addHeader("Authorization", AppPrefs.getInstance(context).getSessionToken()); 
      } 
     }; 

     Gson gson = new GsonBuilder().setDateFormat(dateTimeFormat).create(); 
     GsonConverter gsonConverter = new GsonConverter(gson); 

     RestAdapter.Builder builder = new RestAdapter.Builder() 
       .setRequestInterceptor(requestInterceptor).setConverter(gsonConverter) 
       .setLogLevel(RestAdapter.LogLevel.FULL).setLog(new AndroidLog("Boom!")) 
       .setEndpoint(BASE_URL); 

     if(errorHandler != null) 
     { 
      builder.setErrorHandler(errorHandler); 
     } 

     if(instance == null) 
     { 
      instance = new OkClient(makeTimeoutClient(READ_TIMEOUT, CONNECT_TIMEOUT)); 
     } 
     builder.setClient(instance); 

     return builder; 
    } 

Ошибка:

D/Boom!﹕ ---> HTTP POST https://serverurl/29520 
D/Boom!﹕ Authorization: Token 4a712131231299ba5bd0737163bcf1d6ff5325b4ef 
D/Boom!﹕ Content-Type: application/json 
D/Boom!﹕ Content-Length: 17 
D/Boom!﹕ {"passcode":"55"} 
D/Boom!﹕ ---> END HTTP (17-byte body) 
D/dalvikvm﹕ GC_FOR_ALLOC freed 398K, 5% free 10098K/10528K, paused 19ms, total 19ms 
W/dalvikvm﹕ VFY: unable to find class referenced in signature (Ljava/nio/file/Path;) 
W/dalvikvm﹕ VFY: unable to find class referenced in signature ([Ljava/nio/file/OpenOption;) 
I/dalvikvm﹕ Could not find method java.nio.file.Files.newOutputStream, referenced from method okio.Okio.sink 
W/dalvikvm﹕ VFY: unable to resolve static method 29588: Ljava/nio/file/Files;.newOutputStream (Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/OutputStream; 
D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x000a 
W/dalvikvm﹕ VFY: unable to find class referenced in signature (Ljava/nio/file/Path;) 
W/dalvikvm﹕ VFY: unable to find class referenced in signature ([Ljava/nio/file/OpenOption;) 
I/dalvikvm﹕ Could not find method java.nio.file.Files.newInputStream, referenced from method okio.Okio.source 
W/dalvikvm﹕ VFY: unable to resolve static method 29587: Ljava/nio/file/Files;.newInputStream (Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream; 
D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x000a 
D/Boom!﹕ <--- HTTP 400 https://serverurl/29520 (489ms) 
D/Boom!﹕ Allow: POST, OPTIONS 
D/Boom!﹕ Cache-control: no-cache="set-cookie" 
D/Boom!﹕ Content-Type: application/json 
D/Boom!﹕ Date: Sat, 25 Apr 2015 14:19:12 GMT 
D/Boom!﹕ Server: Apache/2.4.7 (Ubuntu) 
D/Boom!﹕ Set-Cookie: AWSELB=B19BD105182D026362B8BC00141D5791F1205A08CAA1F992D8F8EC9B69BB363D3418C9476B70A93F8D096B34C3D75087DEEC69EB5C6D2C30536BE30BC1E0A0EBB500881D9D;PATH=/;MAX-AGE=60 
D/Boom!﹕ Vary: Accept,Cookie 
D/Boom!﹕ X-Frame-Options: SAMEORIGIN 
D/Boom!﹕ Content-Length: 15 
D/Boom!﹕ Connection: keep-alive 
D/Boom!﹕ OkHttp-Selected-Protocol: http/1.1 
D/Boom!﹕ OkHttp-Sent-Millis: 1429971549555 
D/Boom!﹕ OkHttp-Received-Millis: 1429971549598 
D/Boom!﹕ {"status": "2"} 
D/Boom!﹕ <--- END HTTP (15-byte body) 
D/AndroidRuntime﹕ Shutting down VM 
W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x415c7ba8) 
D/dalvikvm﹕ GC_FOR_ALLOC freed 439K, 5% free 10173K/10644K, paused 20ms, total 20ms 
D/dalvikvm﹕ GC_FOR_ALLOC freed 494K, 5% free 10187K/10716K, paused 20ms, total 20ms 
E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: AndroidCall , PID: 5922 
retrofit.RetrofitError: 400 BAD REQUEST 
     at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:388) 
     at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240) 
     at $Proxy2.registerEvent(Native Method) 
     at AndroidCall .app.ui.activities.EventListActivity.matchPasscode(ListActivity.java:387) 
     at AndroidCall .app.ui.activities.EventListActivity.access$200(ListActivity.java:49) 
     at AndroidCall .app.ui.activities.EventListActivity$6.onClick(ListActivity.java:302) 
     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5017) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
     at dalvik.system.NativeStart.main(Native Method) 
I/Process﹕ Sending signal. PID: 5922 SIG: 9 
+0

Код состояния 400 в протоколе http 1.1 означает плохой запрос: 'Запрос не мог быть понят сервером из-за искаженного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений. «Это означает, что запрос, который вы выполняете, не подходит для службы, обслуживаемой сервером. В соответствии с вашим кодом вы делаете запрос от этого вызова: «NetworkHelper.makeRequestAdapter», но это POST? Поскольку ваша служба зарегистрирована (например, @POST («remove/{id}») ') –

+0

Спасибо, что ответили на вопрос Хорхе, да, я уверен, что это POST, сейчас я дважды проверял. Я также добавил обновление makerequest-адаптера – Nych

+1

. Я понимаю, часть ошибки здесь заключается в том, что я пытаюсь отправить строку, не конвертируя ее сначала в файл JSON.Вот почему я получил «статус: 0», что означает, что произошла ошибка. Я преобразовал свою строку в объект JSON, и теперь я получаю статус 2, который обозначает неправильный пароль. Однако мой плохой запрос 400 все еще остается. ПОЖАЛУЙСТА, любая помощь или предложение будут очень полезны для меня. – Nych

ответ

0

Я понял это. Я обрабатывал неправильное исключение, и API возвращал 400 вместо 401 для отправки неправильного кода доступа. Я поменял свой вызов на ошибку исключения сетевой сети на ошибку исключения.

Спасибо всем за помощь.

-1

Вы

@Headers("Content-Type: application/json") 
@POST("removed/{id}") 
RegisterResponse registerEvent(@Path("eventID") int eventID, @Body RegisterRequest password)throws NetworkException; 

Обратите внимание, что вы называете идентификатор т он (в аннотации @POST), но затем в параметре вы используете @Path("eventID").

Попробуйте изменить код

@Headers("Content-Type: application/json") 
@POST("removed/{eventID}") 
RegisterResponse registerEvent(@Path("eventID") int eventID, @Body RegisterRequest password)throws NetworkException; 
+0

Да, я заметил это, я изменил его, он все еще дает мне ошибку с 400 ошибками. – Nych

+0

обновите журналы на свой вопрос, пожалуйста. вы, вероятно, получаете что-то еще сейчас –

+0

Я их обновил – Nych