Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
启动加载对话框Android WebView_Android_Webview_Loading_Startup - Fatal编程技术网

启动加载对话框Android WebView

启动加载对话框Android WebView,android,webview,loading,startup,Android,Webview,Loading,Startup,我有一个使用网络视图的Android应用程序。在应用程序启动时,它会检查WebView是否可以连接到服务器。如果可以连接,则不会出现问题,应用程序会立即加载,WebView会显示页面。但如果服务器不可用或连接不工作,则需要几秒钟(5-10)后才会显示错误消息。这是因为当您的连接速度较慢时,它不会连续显示错误消息 因此,在没有连接的情况下,你会在5-10秒内看到一个黑屏。我想要的只是启动应用程序时的一个简单加载对话框。这样你就看不到黑屏,人们就知道应用程序在做什么。我怎样才能用最简单有效的方法来归

我有一个使用网络视图的Android应用程序。在应用程序启动时,它会检查WebView是否可以连接到服务器。如果可以连接,则不会出现问题,应用程序会立即加载,WebView会显示页面。但如果服务器不可用或连接不工作,则需要几秒钟(5-10)后才会显示错误消息。这是因为当您的连接速度较慢时,它不会连续显示错误消息

因此,在没有连接的情况下,你会在5-10秒内看到一个黑屏。我想要的只是启动应用程序时的一个简单加载对话框。这样你就看不到黑屏,人们就知道应用程序在做什么。我怎样才能用最简单有效的方法来归档呢

谢谢

编辑:

好的,这就是我现在所拥有的,我认为它是有效的,但这是正确的方式吗?在shouldOverideUrlLoading中也可以使用这个异步线程吗?我该怎么做

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?你能告诉我怎么做吗?谢谢你的回答!但是伙计,我真的不懂这些东西。也许有很多问题要问,但你能用我的代码给我举个例子吗?非常感谢你!如果你能给我一个耗时代码的单独部分,完成后要做什么,并告诉我从哪里开始线程(我不能从你的代码中画出来),我可以。我已经自己得到了,这是最好的学习方法;)