2011-05-11 23 views
0

我希望ProgressDialog在我的代码启用WiFi并连接到特定SSID时显示。我开始看到其他问题,并开始另一个线程。当我执行show()和hide()之间的代码时,是否需要启动一个单独的线程才能看到ProgressDialog?我连接的Wifi已知存在并且没有安全密钥。Android中的无限ProgressDialog崩溃应用

package com.connectionmanager.app; 

import java.util.List; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.net.wifi.ScanResult; 
import android.net.wifi.WifiConfiguration; 
import android.net.wifi.WifiConfiguration.KeyMgmt; 
import android.net.wifi.WifiManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class FoundSavedUser extends Activity implements OnClickListener{ 

    private WifiManager WifiInfo; 
    private ProgressDialog dialog; 
    private List<ScanResult> results; 

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

     //logView is temporary for displaying messages regarding connectivity. 
     TextView logView = (TextView) findViewById(R.id.logTextView); 

     WifiInfo = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); 

     //Is WiFi on? 
     if(!WifiInfo.isWifiEnabled()) 
     { 
      //Show the acknowledgment button that will allow user to turn on WiFi. 
      Button wifiButton = (Button) findViewById(R.id.wifiButton); 
      wifiButton.setVisibility(View.VISIBLE); 
      wifiButton.setOnClickListener(this); 
     } 

    } 

    @Override 
    public void onClick(View v) 
    { 
     // TODO Auto-generated method stub 

     if(v.getId() == (R.id.wifiButton)) 
     { 
      //Setup a ProgressDialog until WiFi is switched on. 
      dialog = ProgressDialog.show(FoundSavedUser.this, "", "Loading. Please wait...", true); 
      dialog.show(); 

      //Switch on WiFi 
      WifiInfo.setWifiEnabled(true); 

      //Get list of the results in object format (like an array) 
      results = WifiInfo.getScanResults(); 
      int i = 0; 
      String[] ssid = new String[results.size()]; 
      for (ScanResult result : results) 
      { 
       ssid[i] = result.SSID; 
       i++; 
       Log.v("Hello","Printing result.SSID: " + result.SSID); 
      } 
      Log.v("Hello","Connecting to: myWiFi"); 

      WifiConfiguration wifiConfig = new WifiConfiguration(); 
      wifiConfig.SSID = "\"myWiFi\""; 
      wifiConfig.priority = 1; 
      wifiConfig.allowedKeyManagement.set(KeyMgmt.NONE); 
      wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
      wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
      wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
      wifiConfig.status=WifiConfiguration.Status.ENABLED; 
      int netId = WifiInfo.addNetwork(wifiConfig); 
      if (WifiInfo.enableNetwork(netId, true)) 
      { 
      Log.v("Hello","Connection enabled"); 
      } 
      else 
      { 
      Log.v("Hello","Connection not enabled"); 
      } 
      Log.v("Hello","Print netId: " + netId); 
      Log.v("Hello","Connection success!"); 

      //Hide the ProgressDialog 
      dialog.hide(); 

     } 
    } 
} 

回答

0

正确,它必须在单独的线程中运行。

看看这个解决方案,Android: ProgressDialog doesn't show

+0

非常感谢。将尝试。 – skaneria 2011-05-11 20:46:00

+0

但是,这有效,可以在过程中更改ProgressDialog的消息,或者可以在前一个线程内创建另一个线程并显示另一个ProgressDialog。谢谢 – skaneria 2011-05-11 21:43:31