Java 无法通过gson将WebBackForwardList从json转换回 第一部分:现在在编辑中解决
我正在一个片段中创建一个WebView,它将重新加载当前查看的页面,并在父活动重新启动时维护其历史记录。虽然我找到了一种方法来重新加载当前查看的页面(下面的第二种解决方案),但我仍然在寻找一种方法来维护历史记录 我尝试过的解决方案: :我将restoreState位放在onCreateView中。什么都没有发生,url和历史都没有被保留Java 无法通过gson将WebBackForwardList从json转换回 第一部分:现在在编辑中解决,java,android,json,webview,gson,Java,Android,Json,Webview,Gson,我正在一个片段中创建一个WebView,它将重新加载当前查看的页面,并在父活动重新启动时维护其历史记录。虽然我找到了一种方法来重新加载当前查看的页面(下面的第二种解决方案),但我仍然在寻找一种方法来维护历史记录 我尝试过的解决方案: :我将restoreState位放在onCreateView中。什么都没有发生,url和历史都没有被保留 @Override public View onCreateView(LayoutInflater inflater, ViewGroup contai
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
l = inflater.inflate(R.layout.fragment_page_viewer, container, false);
webView = l.findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(myWebClient);
if(savedInstanceState == null) {
webView.loadUrl(url);
}else{
webView.restoreState(savedInstanceState);
}
return l;
}
@Override
public void onSaveInstanceState(Bundle outState){
webView.saveState(outState);
super.onSaveInstanceState(outState);
}
第二部分:无法将WebBackForwardList从json转换回
当前位置我试着把这当作一项相当繁重的工作。虽然这种方法对于保留当前网页非常有用,但我无法用它保留WebBackForwardList。我尝试通过gson将WebBackForwardList转换为json文件以放入SharedReferences,但当我尝试将json转换回WebBackForwardList时,我得到:
java.lang.RuntimeException:调用公共android.webkit.WebBackForwardList()失败,无参数
更不用说,我仍然不知道在不重写goBack()和goForward()的情况下如何将保留的WebBackForwardList分配给WebView,而且似乎真的应该有一种更简单的方法
@Override
public void onStart() {
super.onStart();
if(webView != null){
Context context = getContext();
SharedPreferences prefs = context.getApplicationContext().getSharedPreferences(context.getPackageName(), Activity.MODE_PRIVATE);
String s = prefs.getString(URL_KEY, "");
if (!s.equals(null))
url = s;
webView.loadUrl(url);
gson = new Gson();
json = prefs.getString(HISTORY_KEY, "");
if(!json.equals(null)){
WebBackForwardList history = gson.fromJson(json, WebBackForwardList.class); //LINE ERROR MESSAGE POINTS TO
String log = history.getItemAtIndex(history.getCurrentIndex()).getUrl();
Log.d("history", log);
}
}
}
@Override
public void onStop() {
super.onStop();
Context context = getContext();
SharedPreferences prefs = context.getApplicationContext().getSharedPreferences(context.getPackageName(), Activity.MODE_PRIVATE);
SharedPreferences.Editor edit = prefs.edit();
gson = new Gson();
json = gson.toJson(webView.copyBackForwardList());
edit.putString(HISTORY_KEY, json);
edit.putString(URL_KEY, webView.getUrl());
edit.commit();
}
编辑:
- 尝试解决方案1的问题是活动代码中的错误
if(fragmentVar == null){...}
,这在活动重新启动时始终为false,因为变量尚未在活动内部分配。相反,我需要写作
if(fragmentManager.findFragmentById(R.id.page_control) == null){...}
因为片段管理器是保留片段的对象
- 然而,我仍然被我无法将WebBackForwardList从json转换为json的原因所困扰