如何取消广播接收器中的http请求?
How to cancel http request in broadcast receiver?
在我的应用程序中,我使用广播接收器来捕获互联网连接和断开状态。它工作正常。这是代码:
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 网络服务。我用不同的 class 写了它们。
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 请求?
您应该创建一个如下所示的方法:
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 调用之前,您应该检查一下,如果它 returns true
,则表示互联网可用,如果是 false
,则表示互联网不可用并且您可以停止您的 http 调用。
此外,如果您的呼叫已经启动,您应该在那里设置请求超时值,例如 30 秒,如果没有互联网,您将得到异常 TimeoutError
在我的应用程序中,我使用广播接收器来捕获互联网连接和断开状态。它工作正常。这是代码:
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 网络服务。我用不同的 class 写了它们。 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 请求?
您应该创建一个如下所示的方法:
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 调用之前,您应该检查一下,如果它 returns true
,则表示互联网可用,如果是 false
,则表示互联网不可用并且您可以停止您的 http 调用。
此外,如果您的呼叫已经启动,您应该在那里设置请求超时值,例如 30 秒,如果没有互联网,您将得到异常 TimeoutError