首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接3G与Wi连接

连接3G与Wi连接
EN

Stack Overflow用户
提问于 2013-03-25 22:45:58
回答 1查看 646关注 0票数 1

我正在开发一个使用的android应用程序。当连接在wi网络中时,工作正常,但在3G网络中连接时,失败(http 404未找到)。

这不仅仅发生在设备上。为了进行测试,我在桌面上创建了一个主要的方法,并且出现了问题。当我连接到Wifi网络和3G网络时,就会出现故障。

我看到的HttpRequest头和他的有相同的信息,当3g或wifi。

什么可以是?救救我!

代码语言:javascript
复制
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
HttpConnectionParams.setSoTimeout(httpParams, 10000);       

System.setProperty("http.keepAlive", "false");
HttpClient client = new DefaultHttpClient(httpParams);
HttpGet get = new HttpGet(url);

get.addHeader("Referer", "http://rast.sample.com/sample");
get.addHeader("User-Agent","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22");
get.addHeader("Content-Type","application/x-www-form-urlencoded");
get.addHeader("X-Requested-With","XMLHttpRequest11");
get.addHeader("Accept","application/xml, text/xml, */*");
get.addHeader("Cache-Control","no-cache"); // HTTP/1.1
get.addHeader("Expires", "Sat, 26 Jul 1997 05:00:00 GMT");
get.addHeader("Connection","close");

HttpResponse resp = client.execute(get);
HttpEntity entityResp = resp.getEntity();

我认为问题可以是3G缓存,我怎么能清理?

编辑:我意识到3G有时起作用,有时不起作用。

我做了以下测试:在3G上有两个设备,一个在工作,另一个不工作。我使设备是作为接入点工作的设备不工作(共享3G网络的工作设备),然后其他设备也工作。

Edit2:我意识到导航站点,连接到3G网络,它可以工作。它能是什么?

EN

回答 1

Stack Overflow用户

发布于 2013-03-25 22:51:49

也许是因为连接还没有建立,所以有问题……

尝试像下面建议的那样等待连接:https://stackoverflow.com/a/8679706/944070

也适用于3G

编辑:

在您的额外代码之后,我还建议您将超时时间从10000更改为4500060000,3G总是比wifi慢!

编辑2:wait until wifi connected on android链接的精化。

更改代码如下:

代码语言:javascript
复制
Thread t = new Thread() {
    @Override
    public void run() {
        try {
            //check if connected!
            int count = 0;
            while (!isConnected(YourActivityName.this)) {
                count++;
                //Wait to connect
                Thread.sleep(1000);  
                // log to help you understand what is going on...
                Log.w("debug", "no connection try "+ count); // ... do not forget to remove it!
                // DO NOT TRY FOR EVER!!!
                if(count > Number_of_allowed_times) {
                    break;
                }
            }
            if(isConnected(YourActivityName.this)) {
               Log.w("debug", "network connection OK! ");
               // here you can do your stuff
            } else {
               Log.w("debug", "no connection tried " + count +" times");
            }

        } catch (Exception e) {
        }
    }
};
t.start();

isConnected就像at链接一样:

代码语言:javascript
复制
public static boolean isConnected(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = null;
    if (connectivityManager != null) {
        networkInfo = connectivityManager.getActiveNetworkInfo();
    }

    return networkInfo == null ? false : networkInfo.getState() == NetworkInfo.State.CONNECTED;
}

您可以使用BroadcastReceiver代替线程和等待,并在建立连接时通知其刷新/下载内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15626243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档