안드로이드가 계속해서 절 죽이는군요.. 왜 이렇게 안되는게 많은 지..ㅜ

WebView와 EditText 를 혼용해서 사용할때 EditText에 포커스가 가고 난 다음에 웹뷰에
input을 클릭을 하게 되면 키패드가 올라오지 않는 현상이 생긴다..
찾을 때 계속 focus쪽으로 검색했는데.. 제대로 안나왔는데.. 이벤트로 터치를 하니 잘 되네요..된장.. 삽질..

그냥 가져와서 ctrl+c  & ctrl + v 해보시길..

          .....
          public WebView webview;
          .....
public void onCreate(Bundle savedInstanceState) {
          .....
webview.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                        case MotionEvent.ACTION_UP:
                            if (!v.hasFocus()) {
                                v.requestFocus();
                            }
                            break;
                    }
                    return false;
                }
            });
        ......
}
저작자 표시
신고
webView 사용할 때 alert이나 confirm이 되지 않는다.. 밑에 소스코드처럼 구현 해 주어야 출력이 된다.


webview.setWebChromeClient(new WebChromeClient() {
                public boolean onJsAlert(WebView view, String url,
                        String message, final android.webkit.JsResult result) {
                    new AlertDialog.Builder(myApp)
                            .setTitle("Concierge")
                            .setMessage(message)
                            .setPositiveButton(android.R.string.ok,
                                    new AlertDialog.OnClickListener() {
                                        public void onClick(
                                                DialogInterface dialog,
                                                int which) {
                                            result.confirm();
                                        }
                                    }).setCancelable(false).create().show();

                    return true;
                };

                public boolean onJsConfirm(WebView view, String url,
                        String message, final android.webkit.JsResult result) {
                    new AlertDialog.Builder(myApp)
                            .setTitle("Concierge")
                            .setMessage(message)
                            .setPositiveButton(android.R.string.ok,
                                    new AlertDialog.OnClickListener() {
                                        public void onClick(
                                                DialogInterface dialog,
                                                int which) {
                                            result.confirm();
                                        }
                                    })
                            .setNegativeButton(android.R.string.cancel,
                                    new AlertDialog.OnClickListener() {
                                        public void onClick(
                                                DialogInterface dialog,
                                                int which) {
                                            result.cancel();
                                        }
                                    }).setCancelable(false).create().show();
                    return true;
                }

            });

저작자 표시
신고

웹뷰를 이용한 간단한 어플을 하나 만들었는데.. 세션이 안되서 삽질을 많이 했습니다.
구글링을 통해 소스는 많이 있지만 자바코드에서 특정 웹페이지를 호출해서 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 static WebView webview;
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) {
        CookieSyncManager.getInstance().stopSync();
        }
}
protected void onDestroy() {
        super.onDestroy();
       
        if (cookieManager != null) {
        cookieManager.removeAllCookie();
        }
}
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();
        }
    }
}
저작자 표시
신고
안드로이드 가로세로 크기 구하기

        Display defaultDisplay = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

            int width = defaultDisplay.getWidth();                           // 가로           
            int height = defaultDisplay.getHeight();                         // 세로
        Log.e("suromind",width);
        Log.e("suromind",height);
저작자 표시
신고