java使用AsyncTask检查internet连接并输出WebView内容的正确方法?
我的应用程序基于全屏WebView
,如果没有互联网连接,我想显示一个本地文件,否则加载我的网站。我以前从未使用过AsyncTask
,并尝试了以下方法:
MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Check Internet Connection
mWebView = (WebView) findViewById(R.id.activity_main_webview);
HostAvailabilityTask hostAvailable = new HostAvailabilityTask(this);
boolean online = hostAvailable.isOnline();
if (!online) {
// Loading local html file into web view
mWebView.loadUrl("file:///安卓_asset/sample.html");
} else {
// load my website here
HostAvailabilityTask
public class HostAvailabilityTask extends AsyncTask<String, Void, Boolean> {
private MainActivity main;
public HostAvailabilityTask(MainActivity main) {
this.main = main;
}
protected Boolean doInBackground(String... params) {
return isOnline(); // Correct way using AsyncTask?
}
protected void onPostExecute(Boolean... result) {
if(!result[0]) {
return; // What to return?
}
}
public boolean isOnline() {
Runtime runtime = Runtime.getRuntime();
try {
Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = ipProcess.waitFor();
return (exitValue == 0);
}
catch (IOException e) { e.printStackTrace(); }
catch (InterruptedException e) { e.printStackTrace(); }
return false;
}
}
正如你所看到的,我只是在MainActivity
中调用方法isOnline();
,并且认为这是使用AsyncTask
的错误方式?我只是想确保用“正确的方式”去做。我也不知道在这种情况下返回onPostExecute
的逻辑是什么
如前所述,我从未使用过^{
# 1 楼答案