我想根据webservice的状态执行asynctask ....如果web服务关闭,那么将显示toast ...但它并不像我想要的那样工作......
ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nIn = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
State s = nIn.getState();
ServiceCheck sc = new ServiceCheck(MainActivity.this);
if(s == NetworkInfo.State.CONNECTED)
{
if(sc.isServiceOk())
{
new Test().execute(file_url);
}
}
这就是我要检查服务状态的地方......
public class ServiceCheck {
private Context cntext;
public ServiceCheck(Context context)
{
this.cntext = context;
}
public boolean isServiceOk()
{
try
{
ConnectivityManager conMan = (ConnectivityManager) cntext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nInf = conMan.getActiveNetworkInfo();
if(nInf != null && nInf.isConnected())
{
URL url = new URL(file_url);
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(10000);
urlc.connect();
if(urlc.getResponseCode() == 200)
{
return true;
}
else
{
Toast.makeText(cntext, "Service Down", Toast.LENGTH_LONG).show();
//return false;
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
return false;
}
答案 0 :(得分:1)
您必须在后台线程中执行isServiceOk()方法。根据您发布的内容,您似乎正在从主线程进行此网络调用,这将引发异常。您必须将此方法的结果发回主线程,然后确定是否要继续。如果将此方法委派给后台线程,您仍然可以使用Handler发布Toast。
再次,根据您发布的内容推断,Test是AsyncTask的实现。那部分很好,因为我保证你的网络操作是在后台进行的。
底线是,无论如何,你的isServiceOk()方法需要从后台线程运行 - AsyncTask或普通线程都可以。