如何将这段代码放入AsyncTask或Thread中

时间:2015-07-01 22:42:05

标签: java android multithreading android-asynctask

我是线程和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();
    }

感谢。

1 个答案:

答案 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;
}