android中的setVisibility无法在具有函数调用的按钮单击事件中工作

时间:2015-08-02 17:36:08

标签: java android

登录按钮单击我正在执行活动的互联网连接检查。但是可见性不适用于布局。

protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_sign_in);


            bar = (ProgressBar) this.findViewById(R.id.progressBar);
            linearlayout = (LinearLayout) findViewById(R.id.SignInLinearLayout);
            signin = (Button) findViewById(R.id.btn_signin);
            user_name = (EditText) findViewById(R.id.Txt_Signin_Email);
            user_password = (EditText) findViewById(R.id.Txt_signIn_Password);


            signin.setOnClickListener(new View.OnClickListener() {
                                          @Override
                                          public void onClick(View v) {

                                              linearlayout.setVisibility(View.GONE);
                                              bar.setVisibility(View.VISIBLE);

                                              if (CommonFunctions.hasActiveInternetConnection(getBaseContext())) {
                                                  params = new ArrayList<NameValuePair>(2);
                                                  params.add(new BasicNameValuePair("username", user_name.getText().toString()));
                                                  params.add(new BasicNameValuePair("password", user_password.getText().toString()));

                                                  // Calling async task to get json
                                                  new GetLogIn_Details().execute();
                                              } else {
                                                  bar.setVisibility(View.GONE);
                                                  linearlayout.setVisibility(View.VISIBLE);
                                                  Toast.makeText(getApplicationContext(), "Network Not Available... \n Please check Your Wifi Connection or Mobile Network", Toast.LENGTH_LONG).show();
                                              }


                                          }
                                      }

            );


        }

这是网络检查代码

public abstract class CommonFunctions {
    private static String LOG_TAG = "Network Message";


    public static boolean hasActiveInternetConnection(Context context) {
        if (isNetworkAvailable(context)) {
            try {
                Boolean aResultM = isOnline();
                return aResultM;
            } catch (Exception ex) {
                ex.printStackTrace();
            }


        } else {
            Log.d(LOG_TAG, "No network available!");
        }
        return false;
    }


    public static boolean isNetworkAvailable(Context _context) {
        ConnectivityManager cm = (ConnectivityManager) _context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected()) {
            return true;
        }
        return false;
    }

public static Boolean isOnline() {
        try {
            Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
            int returnVal = p1.waitFor();
            boolean reachable = (returnVal==0);
            return reachable;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return false;
    }
}

可见性不起作用。但是,如果我从点击事件中删除网络检查代码,则可见性正常。我该如何解决这个问题。我发现了一些提示,比如使用延迟方法。但我不想使用延迟或计时器方法。因为网络检查方法本身需要一些时间来执行。

0 个答案:

没有答案