안드로이드 앱이 종료되면 앱이 메모리에 가지고 있던 데이터는 사라지기 때문에 재실행시 필요한 데이터라면 여러 가지 방법으로 저장해 놓아야 합니다.
이 중 가장 쉬운 방법으로 SharedPreferences를 꼽을 수 있습니다. (공식싸이트 설명 바로가기)
Shared Preference는 단순히 디바이스의 내부에 xml 파일 형태로 key, value의 쌍의 값들을 저장해 놓는 방식입니다.
그래서 파일 이름으로 Shared Preference를 오픈 한 후 key를 가지고 값을 찾거나 value를 저장하도록 되어 있습니다.
아래는 파일 이름을 myFile로 하고 key는 keyword라고 가정해서 어떻게 사용하는 지를 정리한 그림입니다.
실제 파일 저장 위치는 앱이 설치된 단말의 /data/data/"PACKAGE_NAME"/shared_prefs/"PREFS_NAME".xml 입니다.
이 위치에 직접 접근하기 위해서는 루팅을 해야 하니 단말을 분실하지 않는한 어느 정도는 안전하다고 할 수 있으나,
만일의 경우를 대비하여 비밀번호와 같은 것은 저장하지 않거나 암호화를 해놓는 것이 좋을 듯 합니다.
참고로 디바이스의 설정 > 해당 앱에서 데이터 지우기를 하게 되면 Shared Preference도 모두 지워지게 됩니다.
이전 예제(http://zeany.net/14)를 바탕으로 사용자가 submit 버튼을 누르면 keyword를 저장하고, 이후 실행 시 해당 값이 있으면 그 값을 화면에 보여주는 예제의 소스입니다.
1) SharedPreferences를 위한 private 멤버 변수 생성 및 초기화
1 2 3 4 5 6 7 | private SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { ... sp = getSharedPreferences("myFile", Activity.MODE_PRIVATE); |
2) 웹뷰로부터 값을 읽어서 Shared Preference에 저장
1 2 3 4 5 6 7 8 9 10 11 12 | mWebView.addJavascriptInterface(new Object() { @JavascriptInterface public void justDoIt(String keyword) { Toast.makeText(MainActivity.this, "Keyword is " + keyword, Toast.LENGTH_LONG).show(); SharedPreferences.Editor editor = sp.edit(); editor.putString("keyword", keyword); editor.commit(); } }, "Zeany"); |
3) Shared Preference로부터 값을 읽어서 웹뷰로 전달
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | mWebView.setWebViewClient(new WebViewClient() { ... @Override public void onPageFinished(WebView view, String url) { if (url.equals(ENTRY_URL)) { String keyword = sp.getString("keyword", ""); String script = "javascript:function afterLoad() {" + "document.getElementById('keyword').value = '" + keyword + "';" + "document.forms[0].setAttribute('onsubmit', 'window.Zeany.justDoIt(elements[0].value); return true;');" + "};" + "afterLoad();"; view.loadUrl(script); } } }); |
앱을 실행한 후 keyword를 원하는 값으로 입력 후 submit을 누릅니다. 이어 앱을 종료한 뒤 다시 실행하면 이전에 입력한 값이 보이는 것을 확인할 수 있습니다.
※ 이 프로젝트는 https://github.com/zeany/webview 에 있으며 아래 명령으로 소스를 가져올 수 있습니다.
(이미 git clone 으로 프로젝트를 내려 받은 경우에는 프로젝트 홈 디렉토리에서 git checkout 만 하면 됩니다.)
git clone https://github.com/zeany/webview.git
cd webview
git checkout -f step-9
'Android' 카테고리의 다른 글
안드로이드 앱에 Firebase 추가하기 (5) | 2017.01.09 |
---|---|
안드로이드 Native에서 Angular JS로 구현된 웹페이지를 보여주는 WebView에 값을 전달하는 방법 (0) | 2017.01.09 |
안드로이드 Native와 WebView 연동 (3) (2) | 2017.01.05 |
안드로이드 Native와 WebView 연동 (2) (0) | 2017.01.04 |
안드로이드 Native와 WebView 연동 (1) (4) | 2017.01.03 |