Wpis z mikrobloga

#programowanie #androiddev Mam problem z uploadem danych przez rest. Korzystam z Retrofit 2.0, mam gotowa biblioteke obslugujaca to api korzystajac z Retrofita 1.9. Jedyna zmiana jaka zauwazylem to zmiana typu TypedFile na RequestBody ( ͡ ͜ʖ ͡) . Potrafie tez zrobic wlasciwe zapytanie przez linuxowego curla. Blad jaki otrzymuje to "Bad Request". Wydaje mi sie, ze problem jest w czesci wysylania/deklarowania pliku.

Api: http://strava.github.io/api/v3/uploads/#post-file
Kod: http://pastebin.com/0Aav6ZWq
  • 8
@panryz: Jesli odpowiedz od retrofita daje prawidlowy link:

Response{protocol=http/1.1, code=400, message=Bad Request, url=[https://www.strava.com/api/v3/uploads](https://www.strava.com/api/v3/uploads)}
to wyglada na to, ze jest ok.
Co do RequestBody to jesli podam zla nazwe pliku/sciezke to otrzymuje blad otwarcia pliku (wiec chyba wczytuje plik poprawnie)
@panryz: udalo mi sie dodac logowanie. Dzieki ze probojesz pomoc! ()

11-19 03:00:08.193 5045-5074/? D/OkHttp: --> POST /api/v3/uploads HTTP/1.1

11-19 03:00:08.193 5045-5074/? D/OkHttp: --> END POST

11-19 03:00:08.441 5045-5074/? D/OkHttp: <-- HTTP/1.1 400 Bad Request (244ms)

11-19 03:00:08.441 5045-5074/? D/OkHttp: Cache-Control: no-cache

11-19 03:00:08.441 5045-5074/? D/OkHttp: Content-Type: application/json; charset=UTF-8

11-19 03:00:08.441 5045-5074/? D/OkHttp: Date: Thu, 19 Nov 2015 14:15:53 GMT

11-19 03:00:08.441 5045-5074/? D/OkHttp:
@panryz: Plik wyslany przez curl i retrofit jest taki sam. Poczytalem logi i znalazlem json z bledem:

{"message":"Bad Request","errors":[{"resource":"Upload","field":"file","code":"not a file"}]}

Czyli wychodzi na to, ze blednie przesylam plik.
W przypadku wysylania przez curl

$ curl -X POST https://www.strava.com/api/v3/uploads \

-F file=@test.fit

nie musimy nic definiowac jak w RequestBody

RequestBody.create(MediaType.parse("text/xml"), file);

Moze tu jest problem?
Znalazłem błąd, prawidłowy interfejs do uploadu wygląda tak (może się komuś przyda):

@ Multipart

@ POST("/api/v3/uploads")

Call upload(

@ Part("file\"; filename=\"upload.gpx\" " ) RequestBody file,

@ Part("datatype") RequestBody datatype,

@ Part("activitytype") RequestBody activitytype);

Oczywiscie kod bez spacji po @, ale nie chcialem nikogo wolac ( ͡° ͜ʖ ͡°)
@panryz: wielkie dzięki, bez Twojej pomocy i sugestii o włączeniu dodatkowych logów o których nie