다른 데이터 (첨부 파일이있는 이메일과 매우 유사)와 함께 이미지를 서버에 가져와야합니다. 나는 또한 그것을 재 시도 할 수있는 신뢰할 수있는 방식으로해야한다. 실패 등.안드로이드가 가장 효율적인 방법으로 서버에 그림 업로드
서버는 WCF REST 서버이며 다른 통신 (JSON)을 많이 사용하지만 이미지를 업로드하기위한 새로운 요구 사항이 있습니다.
저는 JSON을 사용하여 내 서버에 데이터를 게시하므로 안드로이드 측의 GSON을 사용하여 데이터를 직렬화합니다. 여기
내가 그것을 (다른 모든이 방식으로 작동하지만, 난 그냥 이미지로 시작)
- 사용자 작성 활동 필드 (텍스트 데이터)
- 사용자가 일부 사진 (들)을 취 지금까지 구현 가지고 어떻게 카메라 의도를 통해. 현재 나는 그림 1 파일을 사용하고 있습니다.
- SDCard에서 그림을 가져 와서 크기를 조정하십시오. ImageView를보고 바이트로 저장하십시오.
- 사용자 제출 - 바이트 []의 이미지와 함께 모든 데이터를 가져 와서 넣습니다. 자바로는
- 전화 GSON 컨버터를 반대하고 SQLite는 AsyncTask를 레코드에 대한 SQLite는 찾습니다
- 에 객체를
- 저장 객체를 직렬화의 커서를 열고 얻을 텍스트는
- AsyncTask를 내 서버에 HttpConnection에 게시합니다 텍스트 데이터를 생성한다.
- 되는 최종 내 문제에 대한 지금
.. 분명히 # 3 - 내 바이트 배열에 나는 "폭발"램. 때로는 넥서스 S가 부진하다고 느낄 때도 있습니다. 하지만 그렇게함으로써 - SD 카드 나 앱 폴더에 많은 파일을 채우지 않아도됩니다. 나는 사진을 찍고 그것을 잡는 것보다. 다음 사진이 이전 사진을 덮어 씁니다.
단계 5는 느립니다. 나는 GSON에서 사용자 정의 시리얼 라이저를 시도하지 않고 [1, -100,123, -12]와 같은 것으로 바이트 배열을 직렬화하는 대신 Base64로 훨씬 작은 크기를 얻을 수 있지만 그래도 여전히 사용할 수 있습니다. 느려질 것입니다. 그리고 최대 20 개의 이미지를 가질 수 있습니다 ...
# 6 단계는 아무런 문제가되지 않습니다. 그러나 특정 크기로이 모든 일이 내가 좋아하는 무언가가 아니다, 나는 그래서
07-06 20:28:47.113: ERROR/CursorWindow(16292): need to grow: mSize = 1048576, size = 925630, freeSpace() = 402958, numRows = 2
07-06 20:28:47.113: ERROR/CursorWindow(16292): not growing since there are already 2 row(s), max size 1048576
07-06 20:28:47.113: ERROR/Cursor(16292): Failed allocating 925630 bytes for text/blob at 1,1
OpenCursor
에 7 단계에서 오류가 발생하기 시작했다 (I는 300 픽셀 이미지를 시도했다). 이상적으로 모든 데이터를 서버에 단일 피스로 업로드하고 싶습니다.나는 이미지를 SD 카드에 저장하고 이름 만 DB에 저장한다고 생각했다. 서버에 보내기 전에 바로 처리 할 것입니다. 그리고 성공하면 그 이미지들을 삭제할 것입니다. 이런 종류의 로직은 SQLite 스키마를 훨씬 더 복잡하게 만들지 만 더 좋은 방법은 없을 것입니다!
이미지 처리에있어 최선의 방법을 찾고 있습니다.최소 메모리/CPU 사용량에 따라와 수행 방법 : 현재
:
- 테이크 사진
- 썸네일 표시
- 크기 조정
- 은 EDIT 1
서버에게 보내기 나는 여러 부분 MIME 메시지로 전체 shizang을 업로드 할 가능성을 연구 중이다. JAR 파일을 Android 패키지에 추가해야합니다. 또한 아파치 코드는 이미지를로드하는 것입니다 얼마나 효과적 모르겠어요 그들을 전송 http://okandroidletsgo.wordpress.com/2011/05/30/android-to-wcf-streaming-multi-part-binary-images/
을 (난 내 코드보다 더 나은 것 같아요) 그리고 더이 때문에 나는 WCF 측이 모든 분석을 처리 할 필요가 없습니다 것 내장 된 .NET 프레임 워크로이를 수행하는 방법.
http://antscode.blogspot.com/2009/11/parsing-multipart-form-data-in-wcf.html
당신이 노력해도 알려주세요!
편집 2 :
MIME은 좋지 않습니다. 이 같은 일이 Base64로를 사용하여 바이너리 직렬화하기 때문에 아무 소용이
그래서 그림을 데이터베이스에 저장하고 있습니까? 데이터베이스 크기가 폭발적으로 늘어나 사용자가 앱이 전화 내부 저장소에 너무 많은 공간을 차지하고 app2sd 지원을 요청할 것이라고 불평 할 것입니다. 왜 SD 카드에 이미지를 보관하지 않을까요? –
@denis 안드로이드 1MB에서 커서 크기 제한을 발견했기 때문에 내부 저장 장치에 문제가있는 것뿐만 아니라 SQLite에서 이러한 종류의 데이터를 저장하면 쉽게 제한을 초과합니다. 외장형 스토리지를 사용하는 것만으로 이러한 물건을 다루는 올바른 방법 일 것입니다. – katit