我是线程和AsyncTask的新手,我想知道如何在后台运行以下代码:
我有这个方法检查你是否有一个活跃的互联网连接,我试图做的是在调用方法之前显示ProgressDialog并在成功或失败时解除对话:
OnCreate中:
progress = ProgressDialog.show(this, "dialog title","dialog message", true);
if(isOnline()){}else{}
我的方法。
public Boolean isOnline() {
try {
Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.karlol.com");
int returnVal = p1.waitFor();
boolean reachable = (returnVal==0);
canshowview = true;
progress.dismiss();
return reachable;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
该方法运行良好(它告诉我是否有活动的互联网连接)问题是AlertDialog没有按照我的意愿工作,所以我很确定如果我把它放到一个线程或AsynTask它应该工作我想要。
更新: 我使用ConnectivityManager检查用户是否已连接到网络,但这不验证连接
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
感谢。
答案 0 :(得分:0)
我不认为这是获得您正在寻找的结果的最佳方式,但这里是
(AsyncTask<String,String,Boolean>(){
protected Boolean doInBackground(String... params) {
try {
Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.karlol.com");
int returnVal = p1.waitFor();
boolean reachable = (returnVal==0);
canshowview = true;
progress.dismiss();
return reachable;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false
}
protected void onPostExecute(Boolean result)
{
/// do something here
super.onPostExecute(result);
}
}).execute()
我会考虑使用它作为解决问题的更好方法
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return false;
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}