インターネットアクセスが必要なアプリケーションを作成します。そして、AlertDialog に 2 つのボタン (「再試行」と「終了」) が表示されるようにしたいと考えています。だから、私はこれを試します:
void prepareConnection() {
if(!checkInternetConnection()) {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setMessage(R.string.internet_not_available);
alert.setTitle(R.string.app_name);
alert.setPositiveButton(R.string.retry, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
prepareConnection();
}});
alert.setNegativeButton(R.string.quit, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}});
alert.show();
}
}
boolean checkInternetConnection() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if ((cm.getActiveNetworkInfo() != null) && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) {
return true;
}
return false;
}
ただし、OnClickListener が非同期で動作する AlertDialog と prepareConnection() は、インターネットが接続されてユーザーが [再試行] をクリックするまで待機しません。私の問題はコード構造にあると思います。それを正しくする方法は?