我正在尝试连接到本地网络中的主机。通过我的电脑或我的安卓手机(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);
}
}