|
日時: 2017/11/18 14:45
名前: lightbox
|
1) Android で入力した値を、javascript: で呼び出した関数に引数を文字列として渡す
2) その値で、Web ページはサーバーから必要な値を JSON オブジェクトでもらう( jQuery なので )
3) そのオブジェクトを JSON で文字列に変換して、Android に送る
4) Android では、その文字列を Gson で Android 内のオブジェクトに変換
5) UI スレッドへその値を送る
Syain クラス
拡張子: package sample.lightbox.webview1011;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.TextView;
import com.google.gson.Gson;
public class MainActivity extends AppCompatActivity {
// WebView のインスタンス
private WebView wv = null;
// 表示されているページの URL
private String startPage = null;
// 初期表示ページ
private String initPage = "http://10.0.2.2/test/001.php";
private Gson gson = null;
private Syain syain = null;
private Handler handler = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler();
gson = new Gson();
// WebView のインスタンスを取得
wv = (WebView) MainActivity.this.findViewById(R.id.webView);
// Webページとのインターフェイスを登録します
// Webページ上からは、androidObject.toAndroid で呼ぶ事ができます
// (toAndroid は、@JavascriptInterface で登録したメソッド)
wv.addJavascriptInterface(new JavaScriptAccess(new JavaScriptAccess.OnGetWebDataListener() {
@Override
public void onWebGetDataListener(String textData) {
try {
syain = gson.fromJson(textData,Syain.class);
// 別スレッドから UI スレッドへのアクセス
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
TextView tv = (TextView) MainActivity.this.findViewById(R.id.textView);
tv.setText(syain.氏名);
}
});
} catch (Exception e) {
e.printStackTrace();
}
Log.i("lightbox", syain.社員コード);
Log.i("lightbox", syain.フリガナ);
Log.i("lightbox", Integer.toString(syain.性別));
Log.i("lightbox", syain.作成日);
Log.i("lightbox", syain.更新日);
Log.i("lightbox", Integer.toString(syain.給与));
Log.i("lightbox", Integer.toString(syain.手当));
if ( syain.管理者 == null ) {
Log.i("lightbox", "NULL");
}
else {
Log.i("lightbox", syain.管理者 );
}
if ( syain.生年月日 == null ) {
Log.i("lightbox", "NULL");
}
else {
Log.i("lightbox", syain.生年月日 );
}
}
}), "androidObject");
// WebView の表示履歴を戻る為のボタン
MainActivity.this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
wv.goBack();
}
});
// Webページの JavaScript の呼び出し
MainActivity.this.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText et = (EditText) MainActivity.this.findViewById(R.id.editText);
String scode =((EditText) MainActivity.this.findViewById(R.id.editText)).getText().toString();
String callString = String.format("javascript:getWebPageData(\"%s\")",scode);
wv.loadUrl(callString);
}
});
// 必ず必要な JavaScript を有効にする設定
wv.getSettings().setJavaScriptEnabled(true);
// 必ず必要な設定
wv.setWebViewClient(new WebViewClient(){
// 必ず必要な設定 : 常に WebView 内でページを表示する為
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("lightbox", "shouldOverrideUrlLoading"+url);
return super.shouldOverrideUrlLoading(view, url);
}
// オプション : 表示されたページの URL を変数にセット
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.i("lightbox", "onPageStarted:" + url);
startPage = url;
}
// オプション : ページを表示し終わってから発生するイベント
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
// 目的のページを表示する
wv.loadUrl(initPage);
}
@Override
protected void onStop() {
super.onStop();
wv.clearHistory();
wv.clearCache(true);
Log.i("lightbox", "onStop");
}
}
|