Java 在Android中从Asynctask返回布尔值
我是android新手。我要做的就是将一个URL传递给Asynctask,然后检查返回的状态码SC_是否正常。如果返回状态代码SC_OK,则该方法应返回true;如果返回任何其他状态代码,则该方法应返回falseJava 在Android中从Asynctask返回布尔值,java,android,android-asynctask,status,Java,Android,Android Asynctask,Status,我是android新手。我要做的就是将一个URL传递给Asynctask,然后检查返回的状态码SC_是否正常。如果返回状态代码SC_OK,则该方法应返回true;如果返回任何其他状态代码,则该方法应返回false class checking extends AsyncTask<String, Void, Boolean> { @Override protected Boolean doInBackground(String... params) {
class checking extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... params) {
// TODO Auto-generated method stub
Boolean a;
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(l1);
HttpResponse response;
try {
response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Toast.makeText(getApplicationContext(),"No", Toast.LENGTH_LONG).show();
a= false;
}
else {
Toast.makeText(getApplicationContext(),"Yes", Toast.LENGTH_LONG).show();
a= true;
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
}
}
类检查扩展了异步任务{
@凌驾
受保护的布尔doInBackground(字符串…参数){
//TODO自动生成的方法存根
布尔a;
HttpClient=new DefaultHttpClient();
HttpGet HttpGet=新的HttpGet(l1);
HttpResponse响应;
试一试{
response=client.execute(httpGet);
StatusLine StatusLine=response.getStatusLine();
int statusCode=statusLine.getStatusCode();
如果(statusCode!=HttpStatus.SC_OK){
Toast.makeText(getApplicationContext(),“No”,Toast.LENGTH_LONG.show();
a=假;
}
否则{
Toast.makeText(getApplicationContext(),“是”,Toast.LENGTH_LONG.show();
a=真;
}
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
最后{
返回false;
}
}
@凌驾
受保护的void onPostExecute(布尔结果){
}
}
将整个内容更改为(盲编码):
类检查扩展了异步任务{
@凌驾
受保护的布尔doInBackground(字符串…参数){
//TODO自动生成的方法存根
布尔a;
HttpClient=new DefaultHttpClient();
HttpGet HttpGet=新的HttpGet(l1);
HttpResponse响应;
试一试{
response=client.execute(httpGet);
StatusLine StatusLine=response.getStatusLine();
int statusCode=statusLine.getStatusCode();
if(statusCode!=HttpStatus.SC\u OK){
a=假;
}否则{
a=真;
}
返回a;
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回false;
}
@凌驾
受保护的void onPostExecute(布尔结果){
Toast.makeText(getApplicationContext(),(结果?“是”:“否”),Toast.LENGTH\u LONG.show();
}
}
您正在将本地布尔值a
设置为true
,但从未返回该值。正如所写的那样,该方法将始终返回false
,有什么问题吗?最后总是调用块,因此您将始终返回false。也许您想删除此块并添加一个返回;最后?不起作用,但现在工作正常。
class checking extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... params) {
// TODO Auto-generated method stub
Boolean a;
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(l1);
HttpResponse response;
try {
response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
a = false;
} else {
a = true;
}
return a;
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
Toast.makeText(getApplicationContext(), (result ? "Yes" : "No"), Toast.LENGTH_LONG).show();
}
}