我正在使用下面的代码连接到wifi网络。有没有一种方法可以延迟textview文本的输出,使其在连接到wifi之前不会显示?该消息在实际连接之前就出现了。

import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

import android.widget.Button;
import android.widget.TextView;

public class TestActivity extends Activity {
/** Called when the activity is first created.
 * @return */



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.main);
    Button OffWifi = (Button)findViewById(R.id.offwifi);
    OffWifi.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {

          WifiManager wifiManager = (WifiManager)getBaseContext().getSystemService(Context.WIFI_SERVICE);
            wifiManager.setWifiEnabled(false);
          }
      });


    TextView tv= (TextView) findViewById(R.id.tv);

    WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    WifiConfiguration wc = new WifiConfiguration();
    wc.SSID = "\"Test\""; //IMP! This should be in Quotes!!

    wc.hiddenSSID = true;
    wc.status = WifiConfiguration.Status.ENABLED;
    wc.priority = 10;
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
    wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
    wc.preSharedKey = "\"Password\"";
    WifiManager  wifiManag = (WifiManager) this.getSystemService(WIFI_SERVICE);
    boolean res1 = wifiManag.setWifiEnabled(true);
    int res = wifi.addNetwork(checkPreviousConfiguration(wc));
    Log.d("WifiPreference", "add Network returned " + res );
    boolean es = wifi.saveConfiguration();
    Log.d("WifiPreference", "saveConfiguration returned " + es );
    boolean b = wifi.enableNetwork(res, true);
    Log.d("WifiPreference", "enableNetwork returned " + b );



         ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

         if (connec != null && (connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) ||(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)){

             tv.setText("You are now connected!  " +  "Version 1.1");
            }else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED ||  connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) {

                tv.setText("The was an error connecting, please try again.");
            }

    }




 public WifiConfiguration checkPreviousConfiguration(WifiConfiguration wc) {
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
 List<WifiConfiguration> configs = wifi.getConfiguredNetworks();
    for(WifiConfiguration config : configs) {
        if(config.SSID.equals(wc.SSID)) return config;
        }
    return wc;
    }

}

最佳答案

使用AsyncTask并将连接放入doInBackground,将setText放入onPostExecute

public class Connect extends AsyncTask<String, Void, Boolean> {

private Activity activity;
private Context context;

public LoadContacts(Activity activity){
    this.activity=activity;
    context = activity;
}

@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    super.onPreExecute();

}

@Override
protected void onPostExecute(Boolean result) {
    TextView tv= (TextView) activity.findViewById(R.id.tv);
    if (connec != null && (connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) ||(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)){

         tv.setText("You are now connected!  " +  "Version 1.1");
        }else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED ||  connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) {

            tv.setText("The was an error connecting, please try again.");
        }
    super.onPostExecute();
}

@Override
protected Boolean doInBackground(String... params) {
    WifiManager wifi = (WifiManager) activity.getSystemService(Context.WIFI_SERVICE);
WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\"Test\""; //IMP! This should be in Quotes!!

wc.hiddenSSID = true;
wc.status = WifiConfiguration.Status.ENABLED;
wc.priority = 10;
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.preSharedKey = "\"Password\"";
WifiManager  wifiManag = (WifiManager) context.getSystemService(WIFI_SERVICE);
boolean res1 = wifiManag.setWifiEnabled(true);
int res = wifi.addNetwork(checkPreviousConfiguration(wc));
Log.d("WifiPreference", "add Network returned " + res );
boolean es = wifi.saveConfiguration();
Log.d("WifiPreference", "saveConfiguration returned " + es );
boolean b = wifi.enableNetwork(res, true);
Log.d("WifiPreference", "enableNetwork returned " + b );



     ConnectivityManager connec = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);

    return true;
}

}


TestActivity应该看起来像这样:

public class TestActivity extends Activity {
/** Called when the activity is first created.
 * @return */

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


setContentView(R.layout.main);

new Connect(this).execute();
}


代码未经测试,可能会出现一些错误,但是我希望您明白这一点。

关于java - 如何延迟textview输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10250590/

10-09 03:39