【问题标题】:how to stop asynctask when internet is connected but no internet access in android如何在连接互联网但在android中无法访问互联网时停止异步任务
【发布时间】:2016-12-30 07:53:20
【问题描述】:
String url = "http://xyzcloud.com/xyz/xyz.php";

这是试图从云端获取数据的 url,如果已连接互联网,则将执行异步任务 我写了这个方法来检查互联网是否连接,在我的移动 wifi 中,当我尝试执行它时它是连接的,它给出了异常

public boolean checkOnlineState()
    {
        boolean val = false;
        ConnectivityManager CManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo NInfo = CManager.getActiveNetworkInfo();
        if (NInfo != null && NInfo.isConnectedOrConnecting()) {
            try {
                if (InetAddress.getByName(url).isReachable(10000))
                {
                    // host reachable
                    val=true;
                    Log.e("checkOnlineState", "" + val);
                }
                else
                {
                    // host not reachable
                    val = false;
                    Log.e("checkOnlineState", "" + val);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return val;
    }

【问题讨论】:

  • 这是出现致命异常的异常:主进程:com.xyz.xyz,PID:13405 android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1288 ) 在 java.net.InetAddress.lookupHostByName(InetAddress.java:432) 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:253) 在 java.net.InetAddress.getByName(InetAddress.java:306)
  • 在 catch 块中处理套接字超时和连接超时
  • 添加两个异常后返回false
  • 如何设置 val = false;抓块?

标签: android android-asynctask


【解决方案1】:
import android.app.Service;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class ConnectionDetector {

    private Context context;

    public ConnectionDetector(Context context) {

        this.context = context;
    }

    public boolean isConnected() {

        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Service.CONNECTIVITY_SERVICE);

        if ( connectivity != null) {

            NetworkInfo info = connectivity.getActiveNetworkInfo();

            if (info != null) {

                if (info.getState() == NetworkInfo.State.CONNECTED) {

                    return true;
                }
            }
        }

        return false;
    }
}

那么例如,你可以利用它:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ConnectionDetector cd = new ConnectionDetector(this);

        if (cd.isConnected()) {
            // do something
        } else {
            //do something
        }

        setContentView(R.layout.activity_main);
    }
}

我在我的应用程序中使用了这种方法(需要互联网连接)并且还没有遇到任何问题。

【讨论】:

  • 妻子已连接,但在这种情况下没有互联网访问权限,它给出了这个异常 org.apache.http.conn.HttpHostConnectException: Connection to xyzcloud.com denied
  • 您是否在 Manifest 文件中添加了权限:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
相关资源
最近更新 更多