[Android] 안드로이드에서 httpPost multiparts로 전송하기(멀티파트, 멀티파츠)

Posted by Find my true self Fimtrus
2014. 6. 24. 16:10 Programming/Android

안드로이드에서는 httpClient의 버전이 낮아 multiparts를 지원하지 않는다.


보내고 싶다면 httpConnection을 열고, buffer를 통해서 전송해야 하는데,


만들기가 여간 귀찮은 것이 아니다.


apache에서 httpComponents를 제공하고 있는데, 해당 라이브러리를 사용하면,


별다른 구현을 하지 않더라도 multiparts로 전송할 수 있게 된다.


물론 약 1메가 정도의...라이브러리가 추가되긴 하지만..



아파치 사이트로 이동하여 httpClient 최신버전을 다운받는다.(전 4.3.X 버전 사용중)


Download Page(Click)


당연히 jar 파일이 필요하기 때문에 binary를 클릭해서 받아준다.




다운후 압축을 해제하게 되면, examples, lib, tutorial 폴더가 나오는데,


lib에 있는 jar파일들을 안드로이드 프로젝트의 libs 폴더로 복사하면 된다.


이제 multiparts로 전송하기 위한 준비는 다 되었고, 아래의 코드를 이용하여 보내면 된다.


//Multipart 객체를 선언한다.
MultipartEntityBuilder builder = MultipartEntityBuilder.create() //객체 생성...
	.setCharset(Charset.forName("UTF-8")) //인코딩을 UTF-8로.. 다들 UTF-8쓰시죠?
	.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 
builder.addPart("content",  new FileBody(== 파일객체 ==) ); //빌더에 FileBody 객체에 인자로 File 객체를 넣어준다.
builder.addPart("testKey",  "testData" ); //스트링 데이터..

HttpClient client = AndroidHttpClient.newInstance("Android");

HttpPost post = new HttpPost(== url ==); //전송할 URL 
try {
	post.setEntity(builder.build()); //builder.build() 메쏘드를 사용하여 httpEntity 객체를 얻는다.
	HttpResponse httpRes;
	httpRes = client.execute(post);
	HttpEntity httpEntity = httpRes.getEntity();
	if (httpEntity != null) {
		response = EntityUtils.toString(httpEntity);
	}
} catch (UnsupportedEncodingException e) {
} catch (ClientProtocolException e1) {
} catch (IOException e1) {
} catch (ParseException e) {
}


위와 같이 전송하게 되면, 내부적으로 Stream을 이용하여 서버로 전송하게 되어


따로 작업을 하지 않더라도 multiparts 형태로 전송할 수 있다.


이 댓글을 비밀 댓글로
    • huhu
    • 2015.12.19 22:16
    예제 소스 파일좀 부탁드리겠습니다. 아무리해도 적용이 안됩니다.;

[Android, Hybrid] JavascriptInterface 사용법.

Posted by Find my true self Fimtrus
2014. 6. 24. 14:21 Programming/Hybrid App

아이폰의 경우 Native와 Web간의 통신을 위해서 scheme를 이용하지만 


안드로이드에서는 JavascriptInterface를 이용하여 더욱 편하게 데이터를 주고 받을 수 있다.

예제로 간단한 Toast를 보여주는 인터페이스를 만들어 보겠다.


먼저 웹뷰에 추가 시킬 JavascriptInterface 클래스를 만든다.


public class WebViewInterface {

	private WebView mAppView;
	private Activity mContext;

	/**
	 * 생성자.
	 * @param activity : context
	 * @param view : 적용될 웹뷰
	 */
	public WebViewInterface(Activity activity, WebView view) {
		mAppView = view;
		mContext = activity;
	}
	/**
	 * 안드로이드 토스트를 출력한다. Time Long.
	 * @param message : 메시지
	 */
	@JavascriptInterface
	public void toastLong (String message) {
		Toast.makeText(mContext, message, Toast.LENGTH_LONG).show();
	}
	/**
	 * 안드로이드 토스트를 출력한다. Time Short.
	 * @param message : 메시지
	 */
	@JavascriptInterface
	public void toastShort (String message) { // Show toast for a short time
		Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
	}
}

안드로이드 4.3.X 젤리빈 이상부터 "@JavascriptInterface" annotation을 붙이지 않을 경우

해당 메쏘드는 동작하지 않기 때문에 반드시 붙여줘야한다.(킷캣이상인가??;;)



그리고 Activity의 onCreate 혹은 Fragment의 onCreateView 에서 loadUrl이 불리기전에

WebView 객체의 addJavascriptInterface 메쏘드를 이용해 연결시켜 주면 바로 사용할 수 있다.

무지 간단하다!

public class MainActivity {

	private WebView mWebView = null;
	private WebViewInterface mWebViewInterface;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		getWindow().requestFeature(Window.FEATURE_PROGRESS);
		setContentView(R.layout.activity_main);
		mWebView = (WebView) findViewById(R.id.webview); //웹뷰 객체
		mWebViewInterface = new WebViewInterface(MainActivity.this, mWebView); //JavascriptInterface 객체화
		mWebView.addJavascriptInterface(mWebViewInterface, "Android"); //웹뷰에 JavascriptInterface를 연결
	}
}

addJavascriptInterface를 보면 인터페이스 객체와, 웹에서 사용될 객체 명을 넣어준다.

위와 같이 연결을 하게 되면, 웹페이지에 window.Android 객체가 생성되고, WebViewInterface에 정의된

모든 메쏘드를 사용할 수 있게 된다.


웹페이지에 아래와 같이 입력하게 되면, 안드로이드 Toast를 통해 "JavascriptInterface Test"라는 문구가 보이게 된다.

window.Android.toastShort( "JavscriptInterface Test" );


이 댓글을 비밀 댓글로

[HTML5] audio, video tag 지원 유무 확인

Posted by Find my true self Fimtrus
2014. 4. 28. 18:17 Programming/Hybrid App

if ( document.createElement("video").canPlayType ) {console.log("true")} //지원
else { console.log( "false" );} //미지원
이 댓글을 비밀 댓글로

[Android] GCM Test URL

Posted by Find my true self Fimtrus
2013. 9. 10. 17:49 Programming/Android

일단..내가 필요하기때문에 간단하게 만들어 놨지만,

기능들은 점점 추가될 예정입니다. ( 지금은 하나만 저장되지만, 추후에,, 리스트 저장등..ㅎ)

링크 : GCM 테스트


이 댓글을 비밀 댓글로