我有一个用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()
。我该如何解决?
你忘了给dialog.try调用show方法了
runOnUiThread(new Runnable() {
@Override
public void run() {
AskOption().show();
}
});
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();
}
});
}
所以你在AlertDialog
上创建对象,但你不是在调用show method
。现在你可以把你的代码编写到AskOption()
,你需要在你的show()
上调用AlertDialog
。在你的AskOption()
下面做: -
myQuittingDialogBox.show()