Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的android应用程序在没有互联网连接的情况下没有响应?_Java_Android - Fatal编程技术网

Java 为什么我的android应用程序在没有互联网连接的情况下没有响应?

Java 为什么我的android应用程序在没有互联网连接的情况下没有响应?,java,android,Java,Android,我的应用程序从internet加载网页。当没有internet连接时,它应该在webview中显示一条消息,表明它将再次连接到internet,然后它应该尝试连接。但是,当我测试我的应用程序时,它不会显示ui,直到它连接到互联网。如何解决这个问题 public class ma extends Fragment { String dag = "1"; public WebView webViewma; @Override @Nullable public View onCreateView(

我的应用程序从internet加载网页。当没有internet连接时,它应该在webview中显示一条消息,表明它将再次连接到internet,然后它应该尝试连接。但是,当我测试我的应用程序时,它不会显示ui,直到它连接到互联网。如何解决这个问题

public class ma extends Fragment {

String dag = "1";
public WebView webViewma;

@Override
@Nullable
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    int SDK_INT = android.os.Build.VERSION.SDK_INT;
    if (SDK_INT > 8) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    View v = inflater.inflate(R.layout.ma, container, false);
    webViewma = (WebView) v.findViewById(R.id.webViewma);
    LaadRooster();
    return v;

}


public void LaadRooster() {


    try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://foo.com/foo.php");
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
        nameValuePairs.add(new BasicNameValuePair("dag", dag));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

// Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

        String ret = EntityUtils.toString(response.getEntity());

        if (ret.startsWith("<!DOCTYPE html>")) {
            webViewma.loadData(ret, "text/html", null);



        } else {
            webViewma.loadData("No connection, trying again...", "text/html", null);
            LaadRooster();
        }
    } catch (IOException e) {
                        webViewma.loadData("No connection, trying again...", "text/html", null);
        LaadRooster();
    }
    }
}
公共类ma扩展片段{
字符串dag=“1”;
公共网络视图webViewma;
@凌驾
@可空
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
int SDK_int=android.os.Build.VERSION.SDK_int;
如果(SDK_INT>8){
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(策略);
}
视图v=充气机。充气(R.layout.ma,容器,假);
webViewma=(WebView)v.findviewbyd(R.id.webViewma);
LaadRooster();
返回v;
}
公共无效LaadRooster(){
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://foo.com/foo.php");
List nameValuePairs=新的ArrayList(3);
添加(新的BasicNameValuePair(“dag”,dag));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
HttpResponse response=httpclient.execute(httppost);
String ret=EntityUtils.toString(response.getEntity());
if(ret.startsWith(“”){
webViewma.loadData(ret,“text/html”,null);
}否则{
loadData(“无连接,重试…”,“text/html”,null);
LaadRooster();
}
}捕获(IOE异常){
loadData(“无连接,重试…”,“text/html”,null);
LaadRooster();
}
}
}

通过在主线程上执行HTTP请求,您正在锁定UI。这需要移动到后台线程

此外,检查设备是否通过以下方式连接到internet可能更容易:

public static boolean isConnected(Context context) {

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] allNetworks = cm.getAllNetworkInfo();

    for (NetworkInfo networkInfo : allNetworks) {
        if (networkInfo.isAvailable() && networkInfo.isConnected()) {
            return true;
        }

    }

    return false;
}
在舱单上:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

您的应用程序可能只运行一个线程。从另一个线程中获取httpresponse。