如何处理android studio在调试和运行模式下通过网络连接检查传递的不同值

时间:2015-12-18 18:05:30

标签: android android-studio

我有一个Android应用程序,检查网站的可用性,然后传递消息“网站已连接”,如果网站可用或“网站关闭...请稍后再试”如果网站不可用。

但是我注意到我调试它时应用程序工作正常,如果我通常从android工作室运行应用程序它会提供错误信息,无论网站是否已连接。

以下是我的代码: -

 public boolean process() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                // Do the processing.
                ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo netInfo = cm.getActiveNetworkInfo();
                String link = "https://www.google.co.in/?gfe_rd=cr&ei=5yZ0VoqxOMWM8QfW057wBQ";//this site was used to check for returning a valid connection
            //   String link="http://www.afjndfns.com/";//this site was used to check for returning not a valid connection
                if (netInfo != null && netInfo.isConnected()) {
                    try {
                        URL url = new URL(link);
                        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                        if (urlc.getResponseCode() == 200)
                        {        // 200 = "OK" code (http connection is fine).

                            connection=true;
                        }
                        else
                        {
                            connection=false;
                        }
                    } catch (IOException e) {
                        System.out.print("IOexception"+e);

                    }
                }
            }
        }).start();
        return  connection;
    }

变量连接是一个gloabal变量,默认设置为false。

在我的onCreate方法中,我有TextView Setter。

        if(process()==true)
        {
            tvIsConnected.setBackgroundColor(0xFF00CC00);
            tvIsConnected.setText("Website Connected");
        }
        else
        { // code if not connected
            tvIsConnected.setText("Website Down...please try again later");
        }

我在Android Studio v.2.0预览版3和v.1.3上试过这段代码。

更新:正如@comrade建议调试线程与运行线程相比运行缓慢,所以我必须创建自己的异步任务,这是在单独的线程上运行并检查网站的状态。看到我的回答。

3 个答案:

答案 0 :(得分:1)

当您在DEBUG模式下运行时,它会慢一点#34;比在NORMAL中,所以你的线程有机会完成工作并返回正确的结果。

您需要为异步请求使用正确的逻辑。您可以使用AsyncTask作为示例并在onPostExecute方法中更新tvIsConnected任务。有关AsyncTask检查this和异步工作检查this的详细信息。

答案 1 :(得分:0)

  

hi。您可以使用不可见的webView。

webView.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        isPageLoaded=true; 
        return isPageLoaded; 
    }

    public void onPageFinished(WebView view, String url) {
        if(isPageLoading) {
            tvIsConnected.setBackgroundColor(0xFF00CC00);
            tvIsConnected.setText("Website Connected");
        }
     }
});

答案 2 :(得分:0)

onCreate方法中调用一个Asynctask类,它在后台检查连接。

protected void onCreate(Bundle savedInstanceState) 
{
       new ConCheck().execute();
}

连接检查器类

 class ConCheck extends AsyncTask<Void,Void,Void> {


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialog = new ProgressDialog(MainActivity.this);
            mProgressDialog.setTitle("Please Wait....");
            mProgressDialog.setMessage("Establishing connection to Server...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();

        }


        @Override
        protected Void doInBackground(Void... voids) {

                        // Do the check for connection.
                 ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                 NetworkInfo netInfo = cm.getActiveNetworkInfo();
                 String link = "https://www.google.co.in/?gfe_rd=cr&ei=5yZ0VoqxOMWM8QfW057wBQ";//pass your site here for connection checking
                 if (netInfo != null && netInfo.isConnected()) {
                     try {
                            URL url = new URL(link);
                             HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                             if (urlc.getResponseCode() == 200)
                              {        // 200 = "OK" code (http connection is fine).
                                    connection=true;
                              }
                              else
                              {
                                  connection=false;
                              }
                            } catch (IOException e) {
                                System.out.print("IOexception"+e);

                            }
                        }

            return null;
        }

        protected void onPostExecute(Void result) {
        //do your post checking work here.
            if(connection)
            {
                tvIsConnected.setBackgroundColor(0xFF00CC00);
                tvIsConnected.setText("Servers Connected");
            }
            else
            { // code if connected
                //tvIsConnected.setBackgroundColor(0xFF00CC00);
                tvIsConnected.setText("Server Down...please try again later");

            }
            mProgressDialog.dismiss();
        }
    }

基本上,这个班级检查网站或服务器是否可用。老实说,我无法在StackOverflow

中的任何地方找到更好的答案