我正在尝试连接到本地网络中的主机。到达它可以从我的电脑或我的Android手机(SGS2)工作,它似乎也可以使用我的应用程序,但我想得到一个结果,以检查它是否有效,并取决于继续进行进一步的行动。
我正在使用ASyncTask的实现,名为Connector。 当我调用Connector时,我不仅调用execute而且调用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);
}
}
答案 0 :(得分:1)
我认为您不想调用get()
,因为您已经使用execute()
运行了AsyncTask。如果您只想查看正在设置的已连接变量,请使用Lof
中的onPostExecute()
,因为doInBackground
的结果会发送给它。如果您需要对其执行某些操作,那么您也可以在onPostExecute()
中执行此操作