Java – Check the Internet connection OKHTTP

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
}

Related Problems and Solutions