WebViewのReloadを一定の間隔更新させ更新間隔をPreferenceを用いて可変させたい
解決したいこと
WebViewでReloadを一定の間隔で周期的に実行し、
Reload間隔をPreferenceを用いて可変させたいのですが、
「Preferenceを用いて可変させる」ところがうまくできません。
おそらく、数値(更新時間)をbtn_set.setOnClickListenerで設定する際、
数値の設定と保存がうまくできていないもとの思います。
どの様に修正したらよいかをご教示頂けると非常に助かります。
発生している問題・エラー
WebViewのReloadを一定の間隔で更新というのは基本的にはできております。
ですが、数値を変更した際、設定した数値が反映されず
実行させると、Reload間隔が0msecとなってReloadが多発してしまいます。
MainActivity.java
public class MainActivity extends AppCompatActivity {
static String URL = "https://www.yahoo.co.jp/";
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new MyWebViewClient());
myWebView.setWebChromeClient(new WebChromeClient());
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setAppCacheEnabled(true);
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.getSettings().setSaveFormData(true);
myWebView.loadUrl(URL);
//X分毎にReloadを実行する。
final Handler handler = new Handler();
final Runnable r = new Runnable() {
@Override
public void run() {
if (PreferenceManager1.getPref_reload_switch(getApplicationContext())) { //
int interval1 = PreferenceManager1.getPref_reload_interval(getApplicationContext());
myWebView.reload(); // リロードをする
handler.postDelayed(this, (interval1 * 60000));
}
}
};
handler.post(r);
//X分毎にReloadを実行する。^^//
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
}
@Override
public void onBackPressed() {
if (myWebView != null && myWebView.canGoBack())
myWebView.goBack();// if there is previous page open it
else
super.onBackPressed();//if there is no previous page, close app
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent e) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (myWebView != null && myWebView.canGoBack()) {
myWebView.goBack();
}
return true;
} else {
return super.onKeyDown(keyCode, e);
}
}
// [次の画面を表示]ボタンがタップされたときの処理。
public void onButtonClick(View view) {
// インテントオブジェクトを用意。
Intent intent = new Intent(MainActivity.this, MySettingsActivity.class);
// アクティビティを起動。
startActivity(intent);
}
}
MySettingActivity.java
public class MySettingsActivity extends AppCompatActivity {
private LayoutInflater mLayoutInflater;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_settings);
TextView system_reload = (TextView) findViewById(R.id.id_Reload);
Switch reload_switch = (Switch) findViewById(R.id.id_reload_switch);
reload_switch.setChecked(PreferenceManager1.getPref_reload_switch(getApplicationContext()));
if(PreferenceManager1.getPref_reload_switch(getApplicationContext())) {
system_reload.setEnabled(true);
}
else{
system_reload.setEnabled(false);
}
system_reload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showInputDialog();
}
});
reload_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked == true) {
reload_switch.setChecked(true);
system_reload.setEnabled(true);
} else {
reload_switch.setChecked(false);
system_reload.setEnabled(false);
}
PreferenceManager1.setPref_reload_switch(getApplicationContext(), isChecked);
}
});
}
// [前の画面を表示]ボタンがタップされたときの処理。
public void onButtonClick(View view){
//このアクティビティの終了。
finish();
}
int interval1;
private void showInputDialog() {
mLayoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View dialogView = mLayoutInflater.inflate( R.layout.input_dialog, null );
AlertDialog dialog = new AlertDialog.Builder(this)
.setView(dialogView)
.show();
EditText et_refresh_interval = dialogView.findViewById(R.id.et_refresh_interval);
Button btn_set = dialogView.findViewById(R.id.btn_set);
btn_set.setOnClickListener(view -> {
PreferenceManager1.setPref_reload_interval(getApplicationContext(),interval1);;
interval1 = Integer.parseInt(et_refresh_interval.getText().toString());
if (interval1 > 60) {
interval1 = 60;
} else if (interval1 < 1) {
interval1 = 1;
}
dialog.dismiss();
});
} // showInputDialog
}
PreferenceManager1.java
public class PreferenceManager1 {
public static final String PREFERENCES_NAME = "rebuild_preference";
private static SharedPreferences getPreferences(Context context) {
return context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);
}
public static boolean getPref_reload_switch(Context context) {
SharedPreferences prefs = getPreferences(context);
boolean value = prefs.getBoolean("reset_save", true);
return value;
}
public static void setPref_reload_switch(Context context, boolean value) {
SharedPreferences prefs = getPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("reset_save", value);
editor.commit();
}
public static void setPref_reload_interval(Context context, int value) {
SharedPreferences prefs = getPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("reset_minutes", Integer.toString(value));
editor.commit();
}
public static int getPref_reload_interval(Context context) {
SharedPreferences prefs = getPreferences(context);
String value = prefs.getString("reset_minutes", "1");
return Integer.parseInt(value);
}
}
activity_main.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RelativeLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_gravity="center|bottom"
android:layout_height="match_parent"
tools:ignore="MissingConstraints">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</WebView>
<Button
android:id="@+id/btNext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onButtonClick"
android:text="リロードセッティング"/>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
activity_my_setting.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center_horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left">
<TextView
android:id="@+id/back"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="10dp"
android:onClick="onButtonClick"
android:text="戻る"
android:textSize="25dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="20dp"
android:text="リロードセッティング"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="50dp"
android:gravity="center"
android:textSize="20dp"
android:textStyle="bold"
android:text="リロード"/>
<View
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1" />
<Switch
android:id="@+id/id_reload_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleX="1.5"
android:scaleY="1.5"
android:layout_marginRight="10dp"
android:layout_gravity="right|center"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="20dp"
android:textStyle="bold"
android:text="間隔設定"/>
<View
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1" />
<TextView
android:id="@+id/id_Reload"
android:layout_width="250dp"
android:layout_height="60dp"
android:background="@color/tfe_color_accent"
android:gravity="center"
android:text="間隔設定"
android:textColor="@color/colorWhite"
android:textSize="15dp"
android:layout_gravity="right|center"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
input_dialog.xml
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更新間隔 入力"
android:textSize="30sp"
android:textStyle="bold"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<EditText
android:id="@+id/et_refresh_interval"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="1~60"
android:textSize="30sp"
android:inputType="number"
android:digits="0123456789"
android:maxLength="2"
android:minLines="1"
android:layout_gravity="center_vertical"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="分"
android:textSize="20sp" />
<View
android:layout_width="20dp"
android:layout_height="80dp"/>
<Button
android:id="@+id/btn_set"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Set"
android:layout_gravity="right|center_vertical"
/>
</LinearLayout>
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
0