Android HttpurlConnection使用BufferedReader读取数据,但在将其附加到StringBuilder后获取null值

时间:2016-09-27 08:38:32

标签: android post httpurlconnection bufferedreader stringbuilder

我从reader.readLine()获得了数据。但它不会进入while循环。返回'json'字符串为空。

有人请帮我解决这个问题。我已经尝试了很多正确的解决方案。

try {            
    URL urL = new URL(url);
    urlConnection = (HttpURLConnection) urL.openConnection();
    urlConnection.setRequestMethod("POST");
    urlConnection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    urlConnection.addRequestProperty("Accept", "application/json");
    urlConnection.setConnectTimeout(10000);
    urlConnection.setReadTimeout(15000);
    urlConnection.setDoInput(true);
    urlConnection.setDoOutput(true);
    Uri.Builder builder = new Uri.Builder()
            .appendQueryParameter("PackageName", packagename);

    String query = builder.build().getEncodedQuery();

    OutputStream os = urlConnection.getOutputStream();
    BufferedWriter writer = new BufferedWriter(
            new OutputStreamWriter(os, "UTF-8"));
    writer.write(query);
    writer.flush();
    writer.close();
    os.close();

    urlConnection.connect();

    InputStream in = new BufferedInputStream(urlConnection.getInputStream());

    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    StringBuffer result = new StringBuffer();

    Log.e("READER","....."+reader.readLine());
    String line=reader.readLine();
    while (line != null) {
        result.append(line).append('\n');
    }
    json=result.toString();
    in.close();

} catch (Exception e) {
    e.printStackTrace();
} finally {
    urlConnection.disconnect();
}
Log.e("RESULT","...."+json);
return json;

3 个答案:

答案 0 :(得分:0)

删除日志中的额外reader.readLine()

Log.e("READER","....." + reader.readLine());

试试这段代码,

Log.e("ResponseCode", "" + urlConnection.getResponseCode());

InputStream in = new BufferedInputStream(urlConnection.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuffer result = new StringBuffer();

String line;
while ((line = reader.readLine()) != null) {
    result.append(line);
}
json = result.toString();
in.close();

答案 1 :(得分:0)

这是基本的,也许你错过了它:

   json=result.toString();
    in.close();

} catch (Exception e) {
    e.printStackTrace();
} finally {
    urlConnection.disconnect();
}
Log.e("RESULT","...."+json);
if (json!=null)
return json;

它将跳过空指针异常:

答案 2 :(得分:0)

如果你所做的只是从API下载一个jsonString,这应该让你解决:

String jsonString = "";

    try {

        URL mURL = new URL(yourURL);

        HttpURLConnection mHttpURLConnection;
        mHttpURLConnection = (HttpURLConnection)mURL.openConnection();

        mHttpURLConnection.setDoInput(true);

        mHttpURLConnection.connect();

        InputStream mInputStream = mHttpURLConnection.getInputStream();

        int i = 0;
        while ((i = mInputStream.read()) != -1) {
            jsonString += (char) i;
        }

    } catch (MalformedURLException e) {
        e.printStackTrace();

    } catch (IOException e) {
        e.printStackTrace();

    }
Log.e("JSON","Json String received: " + jsonString);