/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
출처: http://egloos.zum.com/Ragstory/v/3752380
웹뷰를 이용한 간단한 어플을 하나 만들었는데.. 세션이 안되서 삽질을 많이 했습니다.
구글링을 통해 소스는 많이 있지만 자바코드에서 특정 웹페이지를 호출해서 session.getId() 를 찍어본 결과
호출 할 때 마다 다른 값이 나오더군요..뭐 근데.. 방법은 의외로 간단한 거였더군요.. 어쩌면 당연한 거였다는..
일단은 session.getId() 값이 같은 값이 나와야 합니다.. 이 값이 계속 바뀐다면 아무리 삽질을 한들 안되겠지요..
HttpClient httpclient = new DefaultHttpClient(); 이부분을 멤버변수로 바로 선언해 버립니다...
보통 다른 소스들은 호출할 때 마다 계속 재 생성하는데.. 재생성을 안하니 유지가 됩니다..ㅋ 그리고 JSESSIONID를 쿠키로 구우면 OK...
setSyncCookie() 안에 들어 있는 코드는 구글링을 통해 얻은 소스입니다.. 많이들 보셨을듯..하네요.. 바뀐부분은 List<Cookie> cookies = ((DefaultHttpClient)httpclient).getCookieStore().getCookies();
이부분인데.. HttpClient 는 getCookieStroe 메소드가 없어서 위처럼 형변환 해줬습니다..
쿠키로 구을 때 Log 찍어보시면 token값과 JSESSIONID도 같이 구워집니다..
그리고 CookieSyncManager.getInstance().startSync(); 가 되면
웹뷰와 연동 됩니다.. 이렇게 안하면 웹뷰에서 접속하는 것과 HttpClient에서 접속하는 것이 따로 놀더군요...
응용해 보시길 바랍니다.. 더 좋은 방법이 있다면 조언해주시구요^^
public class AndroidTet extends Activity {
public HttpClient httpclient = new DefaultHttpClient(); //멤버변수로 선언
public CookieManager cookieManager;
public String domain = "http://192.168.0.44";
public void onCreate(Bundle savedInstanceState) {
...
CookieSyncManager.createInstance(this);
cookieManager = CookieManager.getInstance();
CookieSyncManager.getInstance().startSync();
...
setSyncCookie();
...
public void onResume() {
super.onResume();
CookieSyncManager.getInstance().startSync();
}
public void onPause() {
super.onPause();
if (CookieSyncManager.getInstance() != null) {
}
protected void onDestroy() {
super.onDestroy();
if (cookieManager != null) {
}
public void setSyncCookie() {
Log.e("surosuro", "token transfer start ---------------------------");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("token", "TEST");// 넘길 파라메터 값셋팅token=TEST
HttpParams params = new BasicHttpParams();
HttpPost post = new HttpPost(domain+/androidToken.jsp");
post.setParams(params);
HttpResponse response = null;
BasicResponseHandler myHandler = new BasicResponseHandler();
String endResult = null;
try {
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
response = httpclient.execute(post);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
endResult = myHandler.handleResponse(response);
} catch (HttpResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
List<Cookie> cookies = ((DefaultHttpClient)httpclient).getCookieStore().getCookies();
if (!cookies.isEmpty()) {
for (int i = 0; i < cookies.size(); i++) {
// cookie = cookies.get(i);
String cookieString = cookies.get(i).getName() + "="
+ cookies.get(i).getValue();
Log.e("surosuro", cookieString);
cookieManager.setCookie(domain, cookieString);
}
}
Thread.sleep(500);
} catch (Exception ex) {
ex.printStackTrace();
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'스마트기기개발관련 > 안드로이드 개발' 카테고리의 다른 글
안드로이드 android [Tip&Tech] 8. Http Post 방식으로 웹서버와 자료를 주고받는 예제 (0) | 2016.04.07 |
---|---|
[Android/안드로이드] URL Encoding / Decoding 방법. 안드로이드 java 자바 한글 일본어 url 인코딩 깨질때 (0) | 2016.04.06 |
android 안드로이드 회전 시 리셋 또는 onCreate()가 불리는 현상 (0) | 2015.12.30 |
Android 안드로이드 개발 Screen Size Inch(인치) 구하기 관련 (0) | 2015.12.11 |
안드로이드 개발 안드로이드 스튜디오 에서 라이브러리 추가하기 (0) | 2015.11.19 |