0

我正在尝试连接到本地网络中的主机。通过我的电脑或我的安卓手机(SGS2)访问它,它似乎也适用于我的应用程序,但我想得到一个结果来检查它是否有效,并根据它继续采取进一步的行动。

我正在使用一个名为 Connector 的 ASyncTask 实现。当我调用连接器时,我不仅调用执行,还调用 get() 以接收表示成功的布尔值。这里的问题是执行执行得很好(肯定到达了主机,我在 doInBackground 中的断点处着陆。

但是我怎样才能接收到我在 doInBackground 中返回的布尔值呢?当我调用 get() 时,它永远不会结束......

基本上,我关心的是变量“connected”,但 get() 似乎永远运行!清单中授予了权限,我手机上的 wifi 已启用并且可以正常工作,我可以访问主机。

这是我执行连接器的地方:

url = new URL("http://192.168.2.103/?LED=T");
            Connector connector = new Connector();
            AsyncTask<URL, Integer, Boolean> execute = connector
                    .execute(url);
            Status status = execute.getStatus();
            boolean connected = false;
            try {
                Log.d("MainActivity", "trying to get result");
                connected = connector.get();
                Log.d("MainActivity", "got result");
            } catch (InterruptedException ie) {
                ie.printStackTrace();
            } catch (ExecutionException ee) {
                ee.printStackTrace();
            }
            System.out.println();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        //do something depending on connected

这是连接器:

public class Connector extends AsyncTask<URL, Integer, Boolean> {

public static boolean connect(URL url) {
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(url.toString());
    System.out.println();

    try {
        HttpResponse response = httpclient.execute(httppost);
        int statusCode = response.getStatusLine().getStatusCode();
        Log.d("myapp", "response " + response.getEntity());
    } catch (ClientProtocolException e) {
        e.printStackTrace();
        return false;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }

    return true;
}

@Override
protected Boolean doInBackground(URL... params) {
    boolean connect = connect(params[0]);

    return connect;
}

@Override
protected void onPostExecute(Boolean result) {
    Log.d("Connector", "onPostExecute");
    super.onPostExecute(result);
}

}

4

1 回答 1

1

我不认为你想打电话get(),因为你已经用execute(). 如果您只想查看已设置连接的变量,请Lof在您onPostExecute()的中使用 a,因为结果来自doInBackground发送给它。如果你需要用它做点什么,那么你也可以这样onPostExecute()

于 2012-12-28T23:33:34.343 回答