Check the Internet connection OKHTTP… here is a solution to the problem.
Check the Internet connection OKHTTP
I’m using the following code to make an API call and direct the user to the page based on the response received. How do I check my internet connection?
I’m using the OK HTTP client and my code looks like this:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = "https://xxxxxxxx/" + orderLineId;
JSONObject jSon = new JSONObject();
try {
jSon.put("prescription_xxxxx", prescriptionIntervalId);
jSon.put("prescription_xxxxxxx", false);
} catch (JSONException e) {
e.printStackTrace();
}
String data = jSon.toString();
RequestBody body = RequestBody.create(JSON, data);
Request request = new Request.Builder()
.url(url)
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", token)
.addHeader("Accept", "application/json")
.put(body)
.build();
client.newCall(request).enqueue(new Callback() {@Override
public void onFailure(Request request, IOException e) {
AlertDialog.Builder dialog = new AlertDialog.Builder(AutoRefillActivity.this);
dialog.setMessage("Something went wrong. Check connection.")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
onBackPressed();
}
});
AlertDialog alert = dialog.create();
alert.show();
}
@Override
public void onResponse(Response response) throws IOException {
if(response.code()==401){
AlertDialog.Builder dialog = new AlertDialog.Builder(AutoRefillActivity.this);
dialog.setMessage("Device was idle for too long please login again.")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
onBackPressed();
}
});
AlertDialog alert = dialog.create();
alert.show();
}
else {
Intent paymentSummary = new Intent(AutoRefillActivity.this,PPPaymentSummaryActivityNew.class);
paymentSummary.putExtra(PPPaymentSummaryActivityNew.EXTRA_ORDER,String.valueOf(orderLineId));
paymentSummary.putExtra("order_line_id",orderLineId);
paymentSummary.putExtra(PPPaymentSummaryActivityNew.EXTRA_CATEGORY_CODE,categoryCode);
paymentSummary.putExtra("prescriptionIntervalId",prescriptionIntervalId);
paymentSummary.putExtra("available",available);
paymentSummary.putExtra("token",token);
Bundle newBundle = new Bundle();
newBundle.putParcelable(PPPaymentSummaryActivityNew.EXTRA_PRODUCT,product);
paymentSummary.putExtras(newBundle);
startActivity(paymentSummary);
}
}
Although I put a warning box in the onFailure of the async request. This will not work. I can still turn off the internet and my app crashes. Is there any solution?
Solution
The following method determines whether the network is available
/**
*
* @param context
* @return true if connected to Internet
*
*/
public static boolean isNetworkAvailable(final Context context) {
final ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm == null) return false;
final NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if no network is available networkInfo will be null
otherwise check if we are connected
return (networkInfo != null && networkInfo.isConnected());
}
Then do your web service like that
if(isNetworkAvailable(context)){
do something
}