Android的HttpURLConnection,只加载第一个4066符号,并中断请求



问题是我没有得到一个完整的结果。只有一部分,那不是销售的一部分,和前4066个字符。问题是一样的,IOException似乎不是由

引起的。
private class GetContent extends AsyncTask<Void, Void, String>{
    HttpURLConnection urlConnection = null;
    BufferedReader reader = null;
    String resultJson = "";
    @Override
    protected String doInBackground(Void... params) {
        try{
            URL url = new URL("http://www.json-generator.com/api/json/get/bSFiRdwiSq?indent=2");
            urlConnection = (HttpURLConnection)url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();
            InputStream inputStream = urlConnection.getInputStream();
            StringBuffer buffer = new StringBuffer();
            reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            while ((line = reader.readLine()) != null){
                buffer.append(line);
            }
            resultJson = buffer.toString();
            Log.d("Result:", resultJson);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}`
结果

D/RESULT:: [ { "guid": "fdaefcc1-6469-4e3a-9d03-722f8de768d9", "index": 0, "favoriteFruit": "banana", "latitude": 52.644930000000002, "company": "DECRATEX", "email": "jodiecollier@decratex.com", "picture": "http://placehold.it/32x32", "tags": [ "esse", "tempor", "fugiat", "labore", "eu", "aliquip", "fugiat" ], "registered": "2015-06-07T09:21:48 -06:00", "eyeColor": "blue", "phone": "+1 (870) 541-3015", "address": "503 Rugby Road, Defiance, Alaska, 2923", "friends": [ { "id": 0, "name": "Melton Reese" }, { "id": 1, "name": "Sara Gilbert" }, { "id": 2, "name": "Nicholson Weber" } ], "isActive": false, "about": "Fugiat Lorem mollit in pariatur incididunt est cupidatat veniam sit officia. Dolor dolor velit ex fugiat dolore officia enim quis in pariatur do ea. Ipsum cillum duis aliquip ut occaecat qui sint est aliqua consequat reprehenderit non. Velit pariatur aute voluptate minim in deserunt amet duis laborum laborum amet. Fugiat nostrud culpa ipsum Lorem proident pariatur aliqua fugiat culpa. Et aliquip magna exercitation ipsum aute voluptate. Dolore magna sint duis ipsum eu consectetur.rn", "balance": "$3,384.03", "name": "Jodie Collier", "gender": "female", "age": 27, "greeting": "Hello, Jodie Collier! You have 3 unread messages.", "longitude": 173.90763799999999, "_id": "58046a786230071a551569b9" }, { "guid": "badaf4d6-54fa-46e3-8a6d-6b6997483b00", "index": 1, "favoriteFruit": "strawberry", "latitude": 39.709885, "company": "DRAGBOT", "email": "alstonmays@dragbot.com", "picture": "http://placehold.it/32x32", "tags": [ "elit", "ea", "ipsum", "velit", "amet", "laborum", "duis" ], "registered": "2016-06-01T05:06:26 -06:00", "eyeColor": "green", "phone": "+1 (911) 423-3011", "address": "248 Forbell Street, Mathews, Vermont, 4994", "friends": [ { "id": 0, "name": "Liza Day" }, { "id": 1, "name": "Catherine Palmer" }, { "id": 2, "name": "Beryl Conway" } ], "isActive": false, "about": "Proident id fugiat pariatur et incididunt commodo est irure in duis ullamco veniam est magna. Id enim qui commodo exercitation labore adipisicing excepteur adipisicing dolor veniam. Qui quis minim commodo mollit est sit.rn", "balance": "$1,375.60", "name": "Alston Mays", "gender": "male", "age": 33, "greeting": "Hello, Alston Mays! You have 10 unread messages.", "longitude": -67.445130000000006, "_id": "58046a78a50c13da27ab0d11" }, { "guid": "e328c11c-f948-42a6-aede-179ec44a7873", "index": 2, "favoriteFruit": "apple", "latitude": 17.807843999999999, "company": "INSOURCE", "email": "cassandramcintyre@insource.com", "picture": "http://placehold.it/32x32", "tags": [ "et", "anim", "dolor", "magna", "quis", "occaecat", "dolor" ], "registered": "2015-09-11T03:36:24 -06:00", "eyeColor": "blue", "phone": "+1 (865) 558-2301", "address": "189 Cranberry Street, Riverton, Arkansas, 5369", "friends": [ { "id": 0, "name": "Whitley Howe" }, { "id": 1, "name": "Roseann Perez" }, { "id": 2, "name": "Sasha Richard" } ], "isActive": false, "about": "Consequat adipisicing ut dolor in. Id enim consectetur qui incididunt non amet laboris. Veniam amet dolore proident est proident dolor sunt nulla est quis veniam commodo anim. Ut exercitation excepteur enim quis et ea veniam non laboris duis. Dolore cillum commodo dolore reprehenderit aliqua labore.rn", "balance": "$3,678.92", "name": "Cassandra Mcintyre", "gender": "female", "age": 29, "greeting": "Hello, Cassandra Mcintyre! You have 8 unread messages.", "longitude": 93.

您需要在代码中实现以下几点:

  1. urlConnection.connect ();当我们调用urlConnection.getInputStream()时,不重要;然后自动调用Url

  2. 关闭你打开的所有流

所以代码是

private class GetContent extends AsyncTask<Void, Void, String>{
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
String resultJson = "";
@Override
protected String doInBackground(Void... params) {
    try{
        URL url = new URL("http://www.json-generator.com/api/json/get/bSFiRdwiSq?indent=2");
        urlConnection = (HttpURLConnection)url.openConnection();
        urlConnection.setRequestMethod("GET");
        InputStream inputStream = urlConnection.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
        StringBuilder builder = new StringBuilder();
        int line;
        while ((line=reader.read()) > 0){
            builder.append((char)line);
        }
        reader.close();
        inputStream.close();
        String resultJson = builder.toString();
        Log.d("Result:", resultJson);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
}

你的读逻辑应该是这样的:

InputStream in = mConnection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in, enconding));    
int ch;
StringBuilder sb = new StringBuilder();         
while ((ch=reader.read()) > 0) {            
    sb.append((char)ch);
}
String resultjson= sb.toString().trim();
Log.d("Result:", resultJson);

最新更新