I am trying to show whether there is an internet connection in my Login class. There is another connection manager class and this class is showing an alert dialog if there is no internet connection but I am getting confused as to where to implement the code as there is also an async task in the Login class ( attempt login) can anyone tell me where to place my code and where im going wrong?
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));
}
}
}
}
}
I've made my comments within your code to helpful clarify where you should perform the logic in question.
To answer your question: You do NOT create an alert dialog from your AsyncTask. The flow goes like this:
Please let me know if you have any questions.
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));
}
}
}
}
use this class for checking internet connectivity...
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();
}
}
then.....
use the this ASyncTask for login attempt.
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();
}
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.