'안드로이드'에 해당되는 글 4건
- 2010.10.01 국내 개발자 안드로이드 마켓 유료앱 판매 가능!
- 2010.05.13 Android에서 POST 방식으로 데이타 가져오기 - 잘못된 케이스, 성공한 케이스 (3)
- 2010.05.11 XML에서 안드로이드 아이콘 사용
URL클래스 또는 HttpClient를 사용하는 방법이 있다.
1. URL 클래스 사용
GET 방식으로 간편히 사용할수 있지만, POST방식은 파라미터를 전달하는 방식이 다르므로
이 대로는 파라미터를 전달할수 없다.
2. HTTPClient 사용
잘못된 예1
HttpPost에 URL과 전달할 파라미터들을 헤더에 추가하여 결과를 얻는다.
HttPost 에 정보 담기
-> HttpClient에서 요청을 실행 HttpResponse로 결과 리턴
-> HttpResponse의 getEntity로 inputstream을 얻어서 결과 얻기
결과를 얻어왔지만,
ㄱ. 파라미터가 제대로 넘어가지 않는 문제와
ㄴ. 한글을 인코딩에서 문제 발생
잘못된 예2
HttpParams 를 사용하여 파라미터를 전달하려함 (후에 안것이지만 HttpParams는 이런 용도가 아니라고 함)
그래서 사용한 방법은
NameValuePair 목록을 가지는 List를 활용하는 방법로 파라미터명 - 값을 List<NameValuePair>로 모아
HttpPost요청에 setEntity(new UrlEncodedFormEntity()) 한다.
결과를 얻어왔지만,
ㄱ. 파라미터가 제대로 넘어가지 않는 문제와
ㄴ. 한글을 인코딩에서 문제 발생
3. 성공한 예
HttpURLConnection을 사용.
PrintWriter를 통해 데이타를 보내고, HttpURLConnection을 통해 InputStream을 얻어 결과를 만든다. -> 파라미터 전송 성공
한글문제는 보내거나 받을때, 모두 최초의 스트림을 만들때 인코딩 문자열을 넘길수 있는 생성자를 통해 한글 인코딩을 전달하여 생성하니 한글도 정상적으로 동작.
댓글을 달아 주세요
-
배우고싶습니다.
한번 따라해 볼려고 했더니
2010.10.18 15:24 [ ADDR : EDIT/ DEL : REPLY ]
PrintWriter pw = new PrintWriter(new OutputStreamWriter(httpURLCon.getOutputStream(), "EUC-KR"));
이 부분에서 에러가 납니다.
IOException 에러 부분으로 바로 넘어가는데...
뭐가 잘 못 된건지 모르겠습니다.
package com.google.android.test_httpPost4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.http.client.ClientProtocolException;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.TypedValue;
import android.widget.TextView;
public class test_httpPost4 extends Activity {
private ProgressDialog pDialog;
private Dialog info_Dialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView tv = (TextView)findViewById(R.id.text1);
try{
URL url = new URL("http://www.koreapost.go.kr/servlet/kpp.post.postInfo");
HttpURLConnection httpURLCon = (HttpURLConnection)url.openConnection();
httpURLCon.setDefaultUseCaches(false);
httpURLCon.setDoInput(true);
httpURLCon.setDoOutput(true);
httpURLCon.setRequestMethod("POST");
httpURLCon.setRequestProperty("content-type", "application/x-www-form-urlencoded");
StringBuffer sb = new StringBuffer();
String searchkeyword = "구름";
sb.append("sc_value").append("=").append(searchkeyword).append("&");
sb.append("sc_displayflag").append("=").append("true").append("&");
sb.append("sc_type").append("=").append("KOREAN").append("&");
sb.append("sc_init").append("=").append("1").append("&");
sb.append("sc_mode").append("=").append("LIST").append("&");
pDialog=ProgressDialog.show(this, "", "reading...");
PrintWriter pw = new PrintWriter(new OutputStreamWriter(httpURLCon.getOutputStream(), "EUC-KR"));
pw.write(sb.toString());
pw.flush();
BufferedReader bf = new BufferedReader(new InputStreamReader(httpURLCon.getInputStream(), "EUC-KR"));
StringBuilder buff = new StringBuilder();
String line;
while((line = bf.readLine()) != null){
buff.append(line);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
자바코드내에선
.setIcon(android.R.drawable.ic_menu_add)
로 사용 가능하다.
레이아웃용 xml에서는 어떻게 사용하냐면
@android:drawable/ic_menu_add
@android:drawbale까지는 자동완성이 지원되지 않지만,
@android:drawable/ 까지 타이핑하면 자동완성 기능이 지원된다.
댓글을 달아 주세요