我正在开发一个使用xml webservice的Android应用程序。在Wi-Fi网络中连接工作正常,但在3G网络中连接时,会失败(未找到http 404)。
它不仅仅发生在设备中。为了进行测试,我在桌面上创建了一个main方法,问题就出现了。当我连接Wifi网络工作和3G网络失败时。
我看到HttpRequest标头和他有相同的信息,在3g或wifi时。
可能是什么?帮帮我!!
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网络,它的工作原理。它能是什么?
答案 0 :(得分:0)
由于连接尚未建立,可能存在问题......
尝试按照此处建议的方式等待连接:https://stackoverflow.com/a/8679706/944070
也适用于3G
修改强>
在你的额外代码之后,我还建议将超时从10000
更改为45000
或60000
3G总是比wifi慢!
编辑2:详细阐述wait until wifi connected on 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;
}
而不是线程和等待,您可以使用BroadcastReceiver
android.net.conn.CONNECTIVITY_CHANGE
,并在建立连接时通知刷新/下载内容。