0

我正在开发一个社交网络应用程序,大部分功能都需要主动连接。有时手机连接到 WIFI,但 WIFI 无法真正上网。普通的连接管理器不保证这一点,它只是检查手机是否连接。为此,它必须使用 asynctask 在后台设置 httpconnection。

public class checkConnectionStatus extends AsyncTask<Void, Void, HttpResponse>{
    private HttpGet httpGet;
    private HttpParams httpParameters;
    private DefaultHttpClient httpClient;
    private HttpResponse response;

    @Override
    protected void onPreExecute() { 
        String url = "http://www.google.come/";
        httpGet = new HttpGet(url);
        httpParameters = new BasicHttpParams();

        int timeoutConnection = 3000;
        HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);

        int timeoutSocket = 5000;
        HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
        httpClient = new DefaultHttpClient(httpParameters);

    }

    @Override
    protected Void doInBackground(Void... params) {
        try {

            response = httpClient.execute(httpGet);
            return response
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }
        return null;
    }
    @Override
    protected void onPostExecute(HttpResponse result) {
        super.onPostExecute(result);
        // At here i do some thing
    }
}

我知道如果这个类包含在每个函数类中,它应该可以正常工作。但是现在,我想通过简单地调用 new checkConnectionStatus().execute() 来重用代码。

因此,每当用户触发 onClick 中的操作时

onClick(){
if(checkConnectionStatus().execute() == false)

像这样的东西..有可能这样做吗?主线程上的网络是另一个问题。

请帮忙。谢谢

4

2 回答 2

2

我认为这可能会有所帮助

ConnectivityManager cmgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        try {
            NetInfo[] netInfo = cmgr.getAllNetworkInfo();
            for (NetworkInfo ni : netInfo) {
                if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                    if (ni.isConnected())
                        return true;
                if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                    if (ni.isConnected())
                        return true;
            }
        } catch (Exception e) {
            e.getStackTrace();
        }
        return false;
于 2014-05-17T02:45:01.443 回答
0

是的,这是可能的,但您不会像那样检查返回值,而是传入一个回调并在 AsyncTask 的 onPostExecute 中调用它。

于 2014-05-18T22:38:30.693 回答