2 u014666034 u014666034 于 2016.02.15 23:14 提问

安卓功能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();

4个回答

wangzhiyu1980
wangzhiyu1980   2016.02.16 08:54
已采纳

可以试试从三个方向考虑
1)Server,在发送代码执行的最后一步打印一下发送的内容,确认确实是在所有的情况下都把数据发送出去了。
而且没有对UE版本进行检查。

2)传输过程中,如果有模拟器的话可以试试在本机抓一下wireshark log,看看传输过程中是不是有什么问题。

3)Client端,如果针对不同版本,接收不到内容,可以试试在不好用的Client端去请求一下不同server的别的内容,看看是不是好用。
如果同样的代码,针对别的内容好用,那问题大概还是出在Server端。

brian512
brian512   2016.02.16 08:43

HttpURLConnection在底层实现不一样,5.0后是用的okhttp,顺着这个思路再看看

Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.16 09:02

byte[] b = new byte[count];
int readCount = 0; // 已经成功读取的字节的个数
while (readCount < count) {
readCount += in.read(bytes, readCount, count - readCount);
}


这样读取试试

qq_17250009
qq_17250009   2016.02.17 20:48

不懂你说的版本问题。但是info = reader.readLine(); 这才读取一行 要循环读取完成

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!