事实证实在某些装备上,底层的网络协定栈处置重定向的问题,302响应码告知利用程序内部的处置流程。运用程序应当等候直到响应码即是302。但是有些装备不能准确地从响应中解析出Location字段,这样Location字段的内容是null,响应码存储在了响应的内容之中。因此可采取下面的解决措施.
private void getConnection(String url){
try {
HttpConnection connect = (HttpConnection)Connector.open(url);
int statusCode = connect.getResponseCode();
int port = connect.getPort();
String reConnectUrl = connect.getHeaderField("Location");
System.out.println("服务器响应代码:"+statusCode);
System.out.println("服务器响应端口:"+port);
if((statusCode == HttpConnection.HTTP_TEMP_REDIRECT) || (statusCode == HttpConnection.HTTP_MOVED_TEMP)
|| (statusCode == HttpConnection.HTTP_MOVED_PERM)){
System.out.println("须要连接重定向"),魔兽世界仿盛大私服;
if(reConnectUrl != null){
//重连接
System.out.println("正在重连");
connect.close();
connect = (HttpConnection)Connector.open(reConnectUrl);
System.out.println("重连胜利");
}else{ //reConnectUrl == null
//解析查找返回头
//......
if(reConnectUrl != null){ //找到URL
//重衔接
System.out.println("正在重连");
connect.close();
connect = (HttpConnection)Connector.open(reConnectUrl);
 ,我未来的小窝; System.out.println("重连胜利");
}else{ //未找到
long startTime = System.currentTimeMillis();
//等候一段时光,或者等HTTP_OK时重连接
while(System.currentTimeMillis()-startTime<1000 || statusCode != HttpConnection.HTTP_OK){
System.out.println("等候重连...");
statusCode = connect.getResponseCode();
}
if(statusCode == HttpConnection.HTTP_OK){
//重衔接
System.out.println("正在重连");
connect.close();
 ,魔兽私服技术论坛; connect = (HttpConnection)Connector.open(reConnectUrl);
System.out.println("重连胜利",前些日子乱画的`;);
}else{ //statusCode != HttpConnection.HTTP_OK
//发布衔接失败或抛出异常
System.out.println("服务器连接失败");
connect.close();
}
}
}
}
InputStream is = connect.openInputStream();
String type = connect.getType();
int len = (int)connect.getLength();
if(len > 0){
int actual = 0;
int bytesread = 0;
byte[] data = new byte[len];
while((bytesread != len) && (actual != -1)){
actual = is.read(data,bytesread,actual);
bytesread += actual;
}
System.out.println(new String(data));
}else{
 ,爱上你,注定是伤; int inBuffer;
StringBuffer sb = new StringBuffer();
while((inBuffer = is.read()) != -1){
sb.append(inBuffer);
}
System.out.println(sb);
}
is.close();
is = null;
connect.close();
connect = null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
红色部分代码是用来读取信息的,之所以要写得这么麻烦是由于由于手机实现得不同,在一些厂商得手机上并不能获取数据长度,因此用一个字节一个字节得读取比拟稳妥!
