【问题标题】:How to cancel http request in broadcast receiver?如何取消广播接收器中的http请求?
【发布时间】:2015-07-22 13:52:27
【问题描述】:

在我的应用程序中,我使用广播接收器来捕获互联网连接和断开状态。它工作正常。代码如下:

public class CheckConnectivity extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent arg1) {

        boolean isNotConnected = arg1.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
        if(isNotConnected){
            Toast.makeText(context, "Disconnected", Toast.LENGTH_LONG).show();

        }
        else
        {
            Toast.makeText(context, "Connected", Toast.LENGTH_LONG).show();
        }

    }
}

我在我的应用程序中使用 http 网络服务。我在不同的班级写了它们。 HttpConnect.java:

public class HttpConnect {
    public static String finalResponse;
    public static HttpURLConnection con = null;
    public static String  sendGet(String url)  {

        try {
            StringBuffer response = null;
            //String urlEncode = URLEncoder.encode(url, "UTF-8");
            URL obj = new URL(url);
            Log.e("url", obj.toString());

            con = (HttpURLConnection) obj.openConnection();

            // optional default is GET
            con.setRequestMethod("GET");

            //add request header
            con.setConnectTimeout(10000);
            int responseCode = con.getResponseCode();

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(con.getInputStream()));
            String inputLine;
            response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            finalResponse  = response.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //print result
        return finalResponse;

    }
}

我的问题是,当广播接收器说没有连接时,如何断开或取消 http 请求。 我在下面尝试了这段代码:

if(isNotConnected){
            Toast.makeText(context, "Disconnected", Toast.LENGTH_LONG).show();
            if(HttpConnect.con != null)
            {
                HttpConnect.con.disconnect();
            }
        }

但它不起作用。谁能告诉我当广播接收器捕获丢失的连接时如何取消 http 请求?

【问题讨论】:

    标签: android web-services http broadcastreceiver


    【解决方案1】:

    您应该创建一种方法,如下所示:

     public static boolean isOnline(Context mContext) {
            ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = cm.getActiveNetworkInfo();
            if (netInfo != null && netInfo.isConnectedOrConnecting()) {
                return true;
            }
            return false;
        }
    

    在你的http调用之前,你应该检查一下,如果它返回true,这意味着互联网可用,如果它是false,它意味着互联网不可用,你可以停止你的http调用。

    另外,如果你的通话已经发起,你应该设置请求超时值比如30秒,如果没有互联网,你会得到TimeoutError的异常

    【讨论】:

    • 不,您应该处理异常并向用户显示适当的消息或重试或根据应用程序流程以任何您喜欢的方式处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多