首页 文章

Android:BufferedReader在第二次后返回错误的数据

提问于
浏览
0

我正在开发一个使用AsyncTasks的Android应用程序,以便从应用程序API获取JSON数据 . 当我启动我的应用程序时,一切顺利,应用程序从API中获取正确的信息 .

我实现了ActionBar pull-to-refresh库,因此人们可以拖动我的listview来刷新他们的数据 . 现在我的应用程序崩溃了 .

我的BufferedReader.readline不是接收任何文本,而是返回这样的字符串 .

���ĥS��Zis�8�+(m��L�ޔ�i}�l�V�8��$AI0��(YN�o�lI�,9cO�V͇�    $��F���f~4r֧D4>�?4b�Տ��P#��|xK#h�����`�4@H,+Q�7��L�

每次我的应用程序想要接收数据时,都会创建一个新的AsyncTask,所以我不知道为什么我的读者会返回类似的东西......

我希望你们能告诉我如何解决这个问题!

编辑:这是我获取数据的方式 .

BufferedReader reader = null; try {reader = new BufferedReader(new InputStreamReader(url.openStream(),“UTF-8”)); } catch(IOException e1){e1.printStackTrace(); } String s = null;
String data =“”;
尝试{
while((s = reader.readLine())!= null)

} catch(IOException e){
// TODO自动生成的catch块
e.printStackTrace();
}

2 回答

  • 1

    我刚才有同样的问题 . 我发现返回的HTML可能会被压缩成GZIP格式 . 使用类似的东西来检查编码,并使用适当的流来解码内容:

    URL urlObj = new URL(url);
    URLConnection conn = urlObj.openConnection();
    
    String encoding = conn.getContentEncoding();
    InputStream is = conn.getInputStream();
    InputStreamReader isr = null;
    
    if (encoding != null && encoding.equals("gzip")) {
        isr = new InputStreamReader(new GZIPInputStream(is));
    } else {
        isr = new InputStreamReader(is);
    }
    
    reader = new BufferedReader(isr);
    

    等等 .

  • 0

    你有没有测试过像 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); 这样的其他想法

    您可以在此网页上查看所有可用的encondings enconding.doc

相关问题