有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我是否在异步任务中实现警报对话框?

我正在尝试显示登录类中是否存在internet连接。还有另一个connection manager类,如果没有internet连接,该类将显示一个警报对话框,但我对在何处实现代码感到困惑,因为登录类(尝试登录)中还有一个异步任务。有人能告诉我在何处放置代码以及我在何处出错吗

 public class LoginActivity extends Activity implements OnClickListener {

    // flag for Internet connection status
    Boolean isInternetPresent = false;

   // Connection detector class
   ConnectionDetector cd;

   EditText username, password;
   Button login;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

      // creating connection detector class instance
    cd = new ConnectionDetector(getApplicationContext());

    /**
     * Check Internet status button click event
     * */

    username = (EditText) findViewById(R.id.username_et);
    password = (EditText) findViewById(R.id.password_et);

    login = (Button) findViewById(R.id.login_bt);
    login.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {


            // get Internet status
            isInternetPresent = cd.isConnectingToInternet();

            // check for Internet status
            if (isInternetPresent) {
                // Internet Connection is Present
                // make HTTP requests
                showAlertDialog(LoginActivity.this, "Internet Connection",
                        "You have internet connection", true);
            } else {
                // Internet connection is not present
                // Ask user to connect to Internet
                showAlertDialog(LoginActivity.this, "No Internet Connection",
                        "You don't have internet connection.", false);
            }
            String name = username.getText().toString();
            String pass = password.getText().toString();
            new AttemptLogin().execute(name, pass);
        }


        public void showAlertDialog(Context context, String title, String message, Boolean status) {
            AlertDialog alertDialog = new AlertDialog.Builder(context).create();

            // Setting Dialog Title
            alertDialog.setTitle(title);

            // Setting Dialog Message
            alertDialog.setMessage(message);

            // Setting alert dialog icon
            alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);

            // Setting OK Button
            alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                }
            });

            // Showing Alert Message
            alertDialog.show();
        }

    });

}


private class AttemptLogin extends
        AsyncTask<String, Integer, String> {

    int success;
    String message = " ", _username, _password;

    @Override
    protected String doInBackground(String... args) {
        _username = args[0];
        _password = args[1];

        try {
            Map<String, String> params = new HashMap<String, String>();
            params.put("tag", "login");
            params.put("username", _username);
            params.put("password", _password);


            HttpUtility.sendPostRequest(params);


            String response = HttpUtility.readRespone();

            JSONObject jObj = null;

            try {

                jObj = new JSONObject(response);

                success = jObj.getInt("success");
                message = jObj.getString("message");


            } catch (JSONException e) {
                Log.e("JSON Parser", "Error parsing data" + e.toString());
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        HttpUtility.disconnect();
        return message;

    }

    protected void onPostExecute(String status) {

        if (status != null) {

            Toast.makeText(getBaseContext(), status, Toast.LENGTH_LONG).show();

            if (success == 1) {
                SharedPreference.store(getApplicationContext(), _username, _password);
                startActivity(new Intent(getBaseContext(), DashboardActivity.class));





            }
        }
    }
}

}


共 (2) 个答案

  1. # 1 楼答案

    使用此类检查internet连接

    public class CheckNetwork {
        private Context context;
    
        public CheckNetwork(Context context) {
            this.context = context;
        }
    
        public boolean isNetworkAvailable() {
            ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo activeNetworkInfo = connectivityManager
                .getActiveNetworkInfo();
            return activeNetworkInfo != null && activeNetworkInfo.isConnected();
        }
    }
    

    然后

    使用this ASyncTask进行登录尝试

    public class AttemptLogin extends AsyncTask<String, Void, String> {
    
        private ProgressDialog dialog;
    
        @Override
        protected void onPreExecute() {
            dialog = new ProgressDialog(LoginActivity.this);
            dialog.setMessage("Loading...");
            dialog.setCancelable(false);
            dialog.show();
            super.onPreExecute();
        }
    
        @Override
        protected String doInBackground(String... arg0) {
            if (new CheckNetwork(LoginActivity.this).isNetworkAvailable() {
                // your get/post related code...
            } else {
                Toast.makeText(LoginActivity.this, "no internet!", Toast.LENGTH_SHORT).show();
            }
            return null;
        }
    
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    }
    
  2. # 2 楼答案

    我在您的代码中做了一些评论,以帮助您澄清应该在哪里执行有问题的逻辑

    回答您的问题:您不会从异步任务创建警报对话框。流程如下:

    1. 你检查一下网络连接
    2. 如果互联网连接可用,请发出登录请求
    3. 如果Internet连接不可用,请显示对话框

    如果你有任何问题,请告诉我

    public class LoginActivity extends Activity implements OnClickListener {
    
        // flag for Internet connection status
        Boolean isInternetPresent = false;
    
       // Connection detector class
       ConnectionDetector cd;
    
       EditText username, password;
       Button login;
    
       @Override
       protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
    
          // creating connection detector class instance
        cd = new ConnectionDetector(getApplicationContext());
    
        /**
         * Check Internet status button click event
         * */
    
        username = (EditText) findViewById(R.id.username_et);
        password = (EditText) findViewById(R.id.password_et);
    
        login = (Button) findViewById(R.id.login_bt);
        login.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                // get Internet status
                isInternetPresent = cd.isConnectingToInternet();
    
                // check for Internet status
                if (isInternetPresent) {
    
                    ***********************************************
                    I moved your code to show a dialog to the beginning of the
                    if block where you have internet. I also changed your dialog
                    to a Toast message, as others have suggested. Dialog is a little
                    too heavy for this in my opinion.
                    ***********************************************
    
                     // Internet Connection is Present
                    // make HTTP requests
                    // showAlertDialog(LoginActivity.this, "Internet Connection",
                    //         "You have internet connection", true);
                    Toast
                    .makeText(this, "You have internet connection", Toast.LENGTH_LONG)
                    .show();
    
                    ***********************************************
                    Assuming that your isConnectingToInternet method returns 
                    the correct value, within this if statement, you know that
                    you have a valid Internet connection. Go ahead and fire offf
                    your AsyncTask here.                
    
                    I moved this code from after your if / else statement to within the
                    if / else statement once you verify that the device has an Internet
                    connection. AGAIN: This is assuming that your isConnectingToInternet
                    returns a proper value. I did not look at that code.
                    **********************************************
    
                    String name = username.getText().toString();
                    String pass = password.getText().toString();
                    new AttemptLogin().execute(name, pass);
    
                } else {
    
                    ***********************************************
                    This logic remains the same. Think about it:
                    If the user doesn't have Internet connection, you can't make a login
                    request.
                    ***********************************************
    
                    // Internet connection is not present
                    // Ask user to connect to Internet
                    showAlertDialog(LoginActivity.this, "No Internet Connection",
                            "You don't have internet connection.", false);
                }
    
            }
    
    
            public void showAlertDialog(Context context, String title, String message, Boolean status) {
                AlertDialog alertDialog = new AlertDialog.Builder(context).create();
    
                // Setting Dialog Title
                alertDialog.setTitle(title);
    
                // Setting Dialog Message
                alertDialog.setMessage(message);
    
                // Setting alert dialog icon
                alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);
    
                // Setting OK Button
                alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
    
                // Showing Alert Message
                alertDialog.show();
            }
    
        });
    
    }
    
    
    private class AttemptLogin extends
            AsyncTask<String, Integer, String> {
    
        int success;
        String message = " ", _username, _password;
    
        @Override
        protected String doInBackground(String... args) {
            _username = args[0];
            _password = args[1];
    
            try {
                Map<String, String> params = new HashMap<String, String>();
                params.put("tag", "login");
                params.put("username", _username);
                params.put("password", _password);
    
    
                HttpUtility.sendPostRequest(params);
    
    
                String response = HttpUtility.readRespone();
    
                JSONObject jObj = null;
    
                try {
    
                    jObj = new JSONObject(response);
    
                    success = jObj.getInt("success");
                    message = jObj.getString("message");
    
    
                } catch (JSONException e) {
                    Log.e("JSON Parser", "Error parsing data" + e.toString());
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
    
            HttpUtility.disconnect();
            return message;
    
        }
    
        protected void onPostExecute(String status) {
    
            if (status != null) {
    
                Toast.makeText(getBaseContext(), status, Toast.LENGTH_LONG).show();
    
                if (success == 1) {
                    SharedPreference.store(getApplicationContext(), _username, _password);
                    startActivity(new Intent(getBaseContext(), DashboardActivity.class));
    
    
    
    
    
                }
            }
        }
    }