1

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

它不仅仅发生在设备中。为了进行测试,我在桌面中创建了一个 main 方法,并且出现了问题。当我连接到 Wifi 网络工作和 3G 网络失败。

在 3g 或 wifi 中,我看到 HttpRequest 标头和他的信息相同。

可以是什么?帮我!!

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 网络,它可以工作。会是什么?

4

1 回答 1

0

可能是由于连接尚未建立而出现问题...

尝试按照此处的建议等待连接:https ://stackoverflow.com/a/8679706/944070

也适用于 3G

编辑:

在您的额外代码之后,我还建议将超时更改为 from 10000to45000600003G 总是比 wifi 慢!

编辑2:详细说明等待wifi连接到android链接。

更改您的代码,例如:

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就像在链接:

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;
}

而不是 Thread and wait 您可以使用BroadcastReceiverforandroid.net.conn.CONNECTIVITY_CHANGE和当连接建立时收到通知以刷新/下载内容。

于 2013-03-25T22:51:49.557 回答