Retrofit1.9 질문드립니다.
조회수 9591회
질문 1
이미지 파일 업로드
https://futurestud.io/blog/retrofit-how-to-upload-files
이 링크를 따라하였습니다.
결과적으로 서버에 파일이 정상적으로 업로드가 되었습니다.
하지만 로그는 failure 로 떨어지고 있습니다.
구글링으로 이슈를 찾아보았으니 해결하지 못했습니다 ㅠㅠ
인터페이스 수정부분
@Multipart
@POST("/SellBook/uploadFile.php")
void upload(@Part("myfile") TypedFile file,
@Part("file_rename") String file_rename,
Callback<String> cb);
파일 업로드
private void uploadFile(File file, String file_rename) {
Retrofit_api service = ServiceGenerator.createService(Retrofit_api.class);
TypedFile typedFile = new TypedFile("multipart/form-data", file);
service.upload(typedFile,file_rename, new Callback<String>() {
@Override
public void success(String s, Response response) {
Log.e("Upload", "success");
}
@Override
public void failure(RetrofitError error) {
Log.e("Upload", error.getMessage());
}
});
}
에러로그
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 6 path $
-
(•́ ✖ •̀)
알 수 없는 사용자
4 답변
-
올려주신 에러 로그로는 Resnpose가 JSON 규격에 맞지 않아서 발생하는 것 같습니다. 파일 업로드 후 서버 Response를 확인해보는게 좋을 것 같습니다. RestAdapter.Builder 생성 시 다음과 같이 로그 레벨을 LogLevel.FULL로 설정하면 모든 네트워크 로그를 볼 수 있습니다.
RestAdapter.Builder builder = new RestAdapter.Builder() .setEndpoint(API_LOCATION) .setLogLevel(RestAdapter.LogLevel.FULL) .setClient(new OkClient(new OkHttpClient()));
파일 업로드 후 내려오는 Response 로그를 복사해서 아래 웹사이트에 붙여넣기 해보세요. 해당 포맷이 JSON 규격에 맞는지 확인할 수 있습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- php에서 json_encode를 이용해 echo 찍어주니 sucess로 떨어집니다. 알 수 없는 사용자 2016.6.11 00:59
- 한가지만 더 질문드리겠습니다 알 수 없는 사용자 2016.6.11 01:05
-
-
로그 상으로는 Response body가 존재하지 않는데 작성하신 Retrofit 인터페이스는 Response body로 BoardCreate를 받도록 정의되어 있어서 발생하는 현상인 것 같습니다.
@POST("/SellBook/register_book.php") void create_board(@Body BoardCreate boardCreate, Callback<BoardCreate> bd);
서버에서 Response body를 내려주거나 클라이언트 코드를 다음과 같이 수정해 보시기 바랍니다. (success 함수의 파라미터도 Void 타입으로 변경하세요.)
@POST("/SellBook/register_book.php") void create_board(@Body BoardCreate boardCreate, Callback<Void> response);
-
(•́ ✖ •̀)
알 수 없는 사용자
- 서버에서 body가 존재하지 않아서 말씀해주신데로 수정했습니다. 그치만 오류는 남아있네요ㅠㅠ 답변 정말 감사합니다!! 알 수 없는 사용자 2016.6.11 19:22
- 서버단에서 reponse부분을 없애버리니 제대로 떨어집니다 감사합니다 알 수 없는 사용자 2016.6.11 19:35
-
-
링크 : https://futurestud.io/blog/retrofit-send-objects-in-request-body 데이터를 body에 담아 보내고 있습니다. 로그를 찍어서 나오는 데이터를 알려주신 싸이트에서 보면 JSON 규격에 맞는거 같은데 에러는 JSON 규격 문제인거같습니다.
@POST("/SellBook/register_book.php") void create_board(@Body BoardCreate boardCreate, Callback<BoardCreate> bd);
Retrofit_api service = ServiceGenerator.createService(Retrofit_api.class); BoardCreate boardCreate = new BoardCreate(user_id,data_group,data_price,data_board,data_phone,data_image1,data_image2,data_image3); service.create_board(boardCreate, new Callback<BoardCreate>() { @Override public void success(BoardCreate boardCreate, Response response) { Log.d("TAG","success"); } @Override public void failure(RetrofitError error) { Log.e("TAG",error.getMessage()); } });
에러내용
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 2 path $
로그에 찍힌 json값
{"book_category":"사회과학대학","book_content":"ㄴㄱㄴㄱㄷㄱ","book_image1":"","book_image2":"","book_image3":"","book_phone":"12312341235","book_price":"145","user_id":"21135270"}
==>
{ "book_category":"사회과학대학", "book_content":"그극", "book_image1":"21135270_1465574585737_Screenshot_2016-06-06-12-23-28.png", "book_image2":"", "book_image3":"", "book_phone":"12341234123", "book_price":"234", "user_id":"21135270" }
-
(•́ ✖ •̀)
알 수 없는 사용자
- 익셉션 메시지만 올려주셨는데, Request부터 Respnose까지 전체 로그를 올려주시면 파악하는데 도움이 될 것 같습니다. 알 수 없는 사용자 2016.6.11 08:10
- 아 정보가 부족했네요 지금 바로 올리겠습니다 알 수 없는 사용자 2016.6.11 10:48
-
-
--> HTTP POST http://요청주소/register_book.php D/Retrofit: Content-Type: application/json; charset=UTF-8 D/Retrofit: Content-Length: 184 D/Retrofit: {"book_category":"사회과학대학","book_content":"테스트","book_image1":"","book_image2":"","book_image3":"","book_phone":"00000000000","book_price":"5000","user_id":"21135270"} D/Retrofit: ---> END HTTP (184-byte body) D/Retrofit: <--- HTTP 200 http://요청주소/register_book.php (412ms) D/Retrofit: Server: nginx D/Retrofit: Date: Sat, 11 Jun 2016 01:49:55 GMT D/Retrofit: Content-Type: text/html D/Retrofit: Transfer-Encoding: chunked D/Retrofit: Connection: keep-alive D/Retrofit: Vary: Accept-Encoding D/Retrofit: P3P: CP='NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE' D/Retrofit: OkHttp-Sent-Millis: 1465609796321 D/Retrofit: OkHttp-Received-Millis: 1465609796670 D/Retrofit: "success" D/Retrofit: <--- END HTTP (14-byte body) ----------------------------------------------------------------------------------------- E/TAG: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 2 path $
현재 이렇게하면 DB에서는 쿼리를 실행해서 success가 떨어집니다 하지만 값들이 제대로 안넘어간건지 값이 비어있습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력