安卓功能5.1下正常 4.0下异常
应用所有对php服务器的http请求,在5.1下正常,在4.4、4.0下不正常。
测试过3台手机和模拟器确认是系统版本问题,与机型无关。
比如在服务器返回福建省份的成绩名单时,5.1机型接收到的内容是:(PC上返回的也是这个结果)
{"num":"9","city":{"1":"厦门","2":"泉州","3":"福州","4":"南平","5":"宁德","6":"漳州","7":"三明","8":"龙岩","9":"莆田"}}
而4.4、4.1接收到的内容则是:
{"num":"0","city":{}}
后来我让服务端输出数据库查询记录集的行数$numcount。一样的服务端代码,5.1收到的是正确的行数,和数据库里一致,4.4收到的则是0。百思不得其解啊!!
客户端的代码都是类似的,都是在进程中执行然后handler接收消息,照这个现象看不是handler的问题。或许可能是客户端代码问题?请各位帮忙看一看。
Thread thread = new Thread(){
@Override
public void run(){
try{
String link = "http://example.com/search_item.php");
link = link + "&item=" + item;
URL url = new URL(link);
HttpURLConnection conn= (HttpURLConnection)url.openConnection(); conn.connect();
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String info = null;
info = reader.readLine();
Message msg = Message.obtain();
msg.obj = info;
handler.sendMessage(msg);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
thread.start();
可以试试从三个方向考虑
1)Server,在发送代码执行的最后一步打印一下发送的内容,确认确实是在所有的情况下都把数据发送出去了。
而且没有对UE版本进行检查。
2)传输过程中,如果有模拟器的话可以试试在本机抓一下wireshark log,看看传输过程中是不是有什么问题。
3)Client端,如果针对不同版本,接收不到内容,可以试试在不好用的Client端去请求一下不同server的别的内容,看看是不是好用。
如果同样的代码,针对别的内容好用,那问题大概还是出在Server端。
HttpURLConnection在底层实现不一样,5.0后是用的okhttp,顺着这个思路再看看
byte[] b = new byte[count];
int readCount = 0; // 已经成功读取的字节的个数
while (readCount < count) {
readCount += in.read(bytes, readCount, count - readCount);
}
这样读取试试
不懂你说的版本问题。但是info = reader.readLine(); 这才读取一行 要循环读取完成