java – 检查互联网连接OKHTTP

我使用以下代码进行api调用,并根据收到的响应将用户定向到页面.我如何检查互联网连接?

我正在使用一个OK HTTP客户端,我的代码如下所示:

 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);

                    }
                }

虽然我在异步请求的onFailure中放了一个警告框.这是行不通的.我仍然可以关闭互联网,我的应用程序崩溃了.对此有何解决方案?

解决方法:

以下方法将确定互联网是否可用

/**
 *
 * @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());
}

然后做你的网络服务这样的东西

if(isNetworkAvailable(context)){
   //do something
}
上一篇:android – 有没有内置的方法来检测okhttp中没有连接的互联网.


下一篇:改进HTTPS连接无法在Android中运行