【问题标题】:how could I refresh a webview?我怎样才能刷新网页视图?
【发布时间】:2017-04-07 09:23:39
【问题描述】:

所以我做了一个网站,只需使用 webview 就可以变成移动应用程序。当我第一次安装 apk 时,它运行得很好,但之后的问题是,网络只是静态的或者不再加载。

它只是打开与我第一次安装它时相同的内容,即使我已经更改了整个网站。我不知道问题出在 webview 还是 android。

我已经尝试在 php 中创建自动刷新/自动重载功能,但它只能在移动浏览器中使用,在我的应用程序中不起作用... 有人知道任何解决方案吗?

因为我是 android 开发的新手,所以我会把我的主要活动的整个代码放在里面

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

//initializing WebView
private WebView mwebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);



    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    //WebView
    mwebView = (WebView) findViewById(R.id.myWebView);
    WebSettings webSettings = mwebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    //improve webView performance
    mwebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
    mwebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    mwebView.getSettings().setAppCacheEnabled(true);
    mwebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    webSettings.setDomStorageEnabled(true);
    webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
    webSettings.setUseWideViewPort(true);
    webSettings.setSavePassword(true);
    webSettings.setSaveFormData(true);
    webSettings.setEnableSmoothTransition(true);


    mwebView.loadUrl("http://192.168.94.2/autorefresh/");
    //force links open in webview only
    mwebView.setWebViewClient(new MyWebviewClient());

}

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();


    return super.onOptionsItemSelected(item);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_home) {
        mwebView.loadUrl("http://192.168.94.2/ee1/");
    }
    if (id == R.id.nav_kolam) {
        mwebView.loadUrl("http://192.168.94.2/ee1/listkolam.php");
    }
    if (id == R.id.nav_pantai) {
        mwebView.loadUrl("http://192.168.94.2/ee1/listpantai.php");
   }
   if (id == R.id.nav_transaksi) {
       System.exit(0);
   }
   if (id == R.id.nav_about) {
       System.exit(0);

   }
    if (id == R.id.nav_keluar) {
        System.exit(0);
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}


//bikin progress dialog
private class MyWebviewClient extends WebViewClient {
    //ProgressDialogue
    @Override

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (Uri.parse(url).getHost().equals("192.168.94.2")) {
            //open url contents in webview
            return false;
        } else {
            //here open external links in external browser or app
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }

    }
    ProgressDialog pd = null;

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        pd=new ProgressDialog(MainActivity.this);
        pd.setTitle("Mohon Tunggu Sebentar");
        pd.setMessage("Website Loading..");
        pd.show();
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        pd.dismiss();
        super.onPageFinished(view, url);
    }
}


//bikin tombol back halaman
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:
                if (mwebView.canGoBack()) {
                    mwebView.goBack();
                } else {
                    finish();
                }
                return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}}

我使用的是原生 php

【问题讨论】:

  • 希望这就是你要找的东西link
  • 删除缓存是否也会破坏会话?因为我的网站有登录功能,我希望它能持续很长时间,这样用户下次打开应用程序时就不需要再次登录了
  • 你试过代码了吗?我不确定在这种情况下你是否可以保持会话。

标签: android webview


【解决方案1】:

webView 缓存站点的所有内容,因此它不需要下载图像等。 为了获得更新,您需要维护文件的版本并在您的 index.html 文件上有一个 cache-control = max-age

【讨论】:

    【解决方案2】:

    mwebView.loadUrl("about:blank"); mwebView.loadUrl("http://192.168.94.2/ee1/");

    在加载任何新网址之前加载空白页面。 所以添加 mwebView.loadUrl("about:blank");在所有 if-else 案例之前。

    希望对您有所帮助!

    【讨论】:

    • 我应该把代码放在哪里?我把它放在这段代码上面 mwebView = (WebView) findViewById(R.id.myWebView); WebSettings webSettings = mwebView.getSettings();并让我的应用没有响应,因为这是我第一次开发移动应用
    • @wildape 你想什么时候重新加载网页?
    • 实际上我有六个导航栏项目,每个项目都链接到不同的 php 页面。当我使用导航栏项目打开它时,我希望在每个项目中重新加载页面
    • 没有导航栏在 apk 中。正如您在包含 if else 的代码中看到的那样。
    【解决方案3】:
    webView.loadUrl("javascript:window.location.reload(true)"); 
    

    这可能有助于重新加载 web 视图。谢谢

    【讨论】:

    • 我应该把代码放在哪里?因为这是我第一次开发移动应用
    • 在声明你的webview后添加
    猜你喜欢
    • 2012-08-31
    • 1970-01-01
    • 2011-07-18
    • 2017-08-12
    • 2021-11-29
    • 2014-06-22
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多