2012-10-15 69 views
0

我制作需要上网的应用程序。我希望它会用两个按钮(“重试”和“退出”)显示AlertDialog。所以,我试试这个:如何建立连接等待警报?

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; 
} 

但AlertDialog与OnClickListener异步工作,prepareConnection()不会等待之前的互联网将连接和用户点击“重试”。我认为我的问题在代码结构中。如何使它正确?

回答

1

我用这样的

boolean connection = checkNetworkConnection(); 
    if(!connection){ 
     createAlertDialog(); 
    } 
    else{ 
     whenConnectionActive(); 
    } 

和createAlertDialog()函数

public void createAlertDialog(){  
    final Dialog dialog = new Dialog(this); 
    dialog.setContentView(R.layout.custom_dialog); 
    dialog.setTitle("Message"); 
    Button continueButton = (Button) dialog.findViewById(R.id.dialogContinueButton); 
    TextView tw = (TextView) dialog.findViewById(R.id.dialogText); 
    Button finishButton = (Button) dialog.findViewById(R.id.dialogFinishButton); 

    tw.setText("Message"); 
    continueButton.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v) { 
      dialog.dismiss(); 
      boolean connection = checkNetworkConnection(); 
      if(!connection){ 
       dialog.show(); 
      } 
      else{ 
       prepareConnection(); 
      } 
     } 
    });