启动加载对话框Android WebView
我有一个使用网络视图的Android应用程序。在应用程序启动时,它会检查WebView是否可以连接到服务器。如果可以连接,则不会出现问题,应用程序会立即加载,WebView会显示页面。但如果服务器不可用或连接不工作,则需要几秒钟(5-10)后才会显示错误消息。这是因为当您的连接速度较慢时,它不会连续显示错误消息 因此,在没有连接的情况下,你会在5-10秒内看到一个黑屏。我想要的只是启动应用程序时的一个简单加载对话框。这样你就看不到黑屏,人们就知道应用程序在做什么。我怎样才能用最简单有效的方法来归档呢 谢谢 编辑: 好的,这就是我现在所拥有的,我认为它是有效的,但这是正确的方式吗?在shouldOverideUrlLoading中也可以使用这个异步线程吗?我该怎么做启动加载对话框Android WebView,android,webview,loading,startup,Android,Webview,Loading,Startup,我有一个使用网络视图的Android应用程序。在应用程序启动时,它会检查WebView是否可以连接到服务器。如果可以连接,则不会出现问题,应用程序会立即加载,WebView会显示页面。但如果服务器不可用或连接不工作,则需要几秒钟(5-10)后才会显示错误消息。这是因为当您的连接速度较慢时,它不会连续显示错误消息 因此,在没有连接的情况下,你会在5-10秒内看到一个黑屏。我想要的只是启动应用程序时的一个简单加载对话框。这样你就看不到黑屏,人们就知道应用程序在做什么。我怎样才能用最简单有效的方法来归
public class WebviewActivity extends MainActivity {
private WebView myWebView;
private ProgressDialog progressDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
final ScrollView mainScrollView = (ScrollView)findViewById(R.id.ScrollView01);
myWebView = (WebView)findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
progressDialog = ProgressDialog.show(WebviewActivity.this, "", "Loading...", true);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
progressDialog.show();
if ( isOnline() == false || isOnlineHost() == false )
myWebView.loadUrl("file:///android_asset/errorpage.html");
else
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
progressDialog.dismiss();
mainScrollView.fullScroll(ScrollView.FOCUS_UP);
}
});
myWebView.requestFocus(View.FOCUS_DOWN);
myWebView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
});
}
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
@Override
public void onResume() {
super.onResume();
new checkConnection().execute();
}
//DOING THE CONNECTION CHECK IN ANOTHER THREAD
public class checkConnection extends AsyncTask<String, Integer, String>{
private ProgressDialog progressDialog;
protected void onPreExecute(){
progressDialog = ProgressDialog.show(WebviewActivity.this, "", "Loading...", true);
progressDialog.show();
}
@Override
protected String doInBackground(String... params) {
if ( isOnline() == true && isOnlineHost() == true )
myWebView.loadUrl(webLink);
else
myWebView.loadUrl("file:///android_asset/errorpage.html");
progressDialog.dismiss();
return null;
}
}
}
公共类WebviewActivity扩展了MainActivity{
私有网络视图myWebView;
私有进程对话;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE\u NO\u TITLE);
setContentView(R.layout.main);
final ScrollView mainScrollView=(ScrollView)findViewById(R.id.ScrollView01);
myWebView=(WebView)findViewById(R.id.WebView);
WebSettings WebSettings=myWebView.getSettings();
setJavaScriptEnabled(true);
progressDialog=progressDialog.show(WebviewActivity.this,“,”正在加载…”,true);
myWebView.setWebViewClient(新的WebViewClient(){
@凌驾
公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
progressDialog.show();
if(isOnline()==false | | isOnlineHost()==false)
myWebView.loadUrl(“file:///android_asset/errorpage.html");
其他的
view.loadUrl(url);
返回true;
}
@凌驾
公共void onPageFinished(WebView视图,字符串url){
progressDialog.disclose();
mainScrollView.fullScroll(ScrollView.FOCUS\u UP);
}
});
myWebView.requestFocus(View.FOCUS\u向下);
myWebView.setOnTouchListener(新视图.OnTouchListener(){
公共布尔onTouch(视图v,运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
case MotionEvent.ACTION\u UP:
如果(!v.hasFocus()){
v、 requestFocus();
}
打破
}
返回false;
}
});
}
@凌驾
配置已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
}
@凌驾
恢复时公开作废(){
super.onResume();
新建checkConnection().execute();
}
//在另一个线程中执行连接检查
公共类checkConnection扩展了异步任务{
私有进程对话;
受保护的void onPreExecute(){
progressDialog=progressDialog.show(WebviewActivity.this,“,”正在加载…”,true);
progressDialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
if(isOnline()==true&&isOnlineHost()==true)
myWebView.loadUrl(webLink);
其他的
myWebView.loadUrl(“file:///android_asset/errorpage.html");
progressDialog.disclose();
返回null;
}
}
}
在显示ProgressDialog
时,使用AsyncTask
检查后台的连接。检查完成后关闭对话框。确保类实现了Runnable
。然后使用类似于:
private WebView myWebView;
private ProgressDialog progressDialog;
作为全局变量
progressDialog = ProgressDialog.show(this, "Title", "Loading...", true, false);
Thread thread = new Thread(this);
thread.start();
要启动线程
public void run() {
// Time consuming task
}
作为线程中运行的内容,以及
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// What to do when thread is finished
progressDialog.dismiss();
}
};
处理线程的完成。这对我来说是一些新东西,看起来很难做到。你能给我举个例子,或者给其他有空闲时间的人举个例子吗?提前谢谢!看一看。执行您的
isOnlineHost
检查doInBackground
方法,并关闭onPostExecute
中的ProgressDialog
。我现在得到了一些东西,它正以我认为正确的方式工作。你能查一下我的资料来源吗?对于shouldOverideUrlLoading中的部件,是否可以使用相同的AsyncTask?你能告诉我怎么做吗?谢谢你的回答!但是伙计,我真的不懂这些东西。也许有很多问题要问,但你能用我的代码给我举个例子吗?非常感谢你!如果你能给我一个耗时代码的单独部分,完成后要做什么,并告诉我从哪里开始线程(我不能从你的代码中画出来),我可以。我已经自己得到了,这是最好的学习方法;)