检查与主服务器的连接后显示对话框

问题描述 投票:0回答:3

我有一个用Starter调用的闪屏。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    StartAnimations();

    Timer t = new Timer();
    t.schedule(new TimerTask() {

        @Override
        public void run() {
            if(isPingAvailable("https://myurl.co.id")) {
                Intent startActivity = new Intent(Starter.this, Login_activity.class);
                startActivity(startActivity);
            }else{
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        AskOption();
                    }
                });
            }
        }
    }, 1000);
}

这是我如何显示我的对话框,仍然在同一个文件中

private AlertDialog AskOption()
{
    AlertDialog myQuittingDialogBox =new AlertDialog.Builder(this)
            .setTitle("Cannot connect to Main server")
            .setMessage("Refresh app ? ")
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    restartActivity(Starter.this);
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            })
            .create();
    return myQuittingDialogBox;

}

这是我的isPingAvailable()

 public static boolean isPingAvailable(String myUrl) {
        boolean isAvailable = false;

        try {
            TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509TrustManager() {
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }
                        public void checkClientTrusted(
                                java.security.cert.X509Certificate[] certs, String authType) {
                        }
                        public void checkServerTrusted(
                                java.security.cert.X509Certificate[] certs, String authType) {
                        }
                    }
            };

            try {
                SSLContext sc = SSLContext.getInstance("SSL");
                sc.init(null, trustAllCerts, new java.security.SecureRandom());
                HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            } catch (Exception e) {
                Log.e("Tag","Err " + e);
            }

            URL url = new URL(myUrl);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            // 30 second time out.
            httpURLConnection.setConnectTimeout(5000);
            httpURLConnection.connect();
            if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                isAvailable = true;
            }
        } catch (Exception e) {
            isAvailable = false;
            e.printStackTrace();
        }
        return isAvailable;
    }

因此,当我尝试我真正的url我的应用程序是打开Login_activity,但当我想要像https://myurl.co.id打开随机网址时,我的应用程序卡在闪屏而不是显示AskOption()。我该如何解决?

android android-alertdialog
3个回答
1
投票

你忘了给dialog.try调用show方法了

 runOnUiThread(new Runnable() {
                @Override
                public void run() {
                      AskOption().show();
                }
            });

0
投票
    Timer t = new Timer();
    t.schedule(new TimerTask() {

        @Override
        public void run() {
            (new BackWork()).execute("your url");
        }
    }, 1000);



(new BackWork()).execute("your url");

class BackWork extends AsyncTask<String, Void, Boolean> {

    @Override
    protected Boolean doInBackground(String... strings) {
        return isPingAvailable(strings[0]);
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        if(aBoolean) {
            Intent startActivity = new Intent(Starter.this, Login_activity.class);
            startActivity(startActivity);
        }else{
            uiThread();
        }
    }
}

private void uiThread(){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            AskOption().show();
        }
    });
}

0
投票

所以你在AlertDialog上创建对象,但你不是在调用show method。现在你可以把你的代码编写到AskOption(),你需要在你的show()上调用AlertDialog。在你的AskOption()下面做: -

myQuittingDialogBox.show()
© www.soinside.com 2019 - 2024. All rights reserved.