OkHttp客户端返回空值

时间:2016-01-22 15:59:09

标签: java android okhttp okhttp3

我试图将okhttpclient与okhttp3一起使用,但它返回一个空值。

这是我的代码:

OkHttpClient client = new OkHttpClient();

HttpUrl.Builder urlBuilder = HttpUrl.parse("http://www.test.com/get_data.php").newBuilder();
urlBuilder.addEncodedQueryParameter("GroupName", groupName);
String url = urlBuilder.build().toString();

Request request = new Request.Builder()
    .url(url)
    .build();

client.newCall(request).enqueue(new Callback() {

    @Override
    public void onFailure(Call call, IOException e) {

    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        try {
            String responseData = response.body().string();
            JSONObject jsonObj = new JSONObject(responseData);
            jArray = jsonObj.getJSONArray("result");
        } catch (JSONException e) {
        }
    }
});

然后responseData返回{"结果":[]}

我尝试使用上面相同的url,但使用不同的httpClient方法,它返回我想要的值,这里是httpclient代码:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.test.com/get_data.php");
httppost.setEntity(new UrlEncodedFormEntity(data));
HttpResponse response   = httpclient.execute(httppost);
Log.i("postData", response.getStatusLine().toString());
HttpEntity entity = response.getEntity();

StringBuilder sb = new StringBuilder();
String result = null;
try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent()), 65728);
    String line = null;
    while ((line = reader.readLine()) != null) {
        sb.append(line);
    }

    if(sb.toString().trim().length() > 0) {
        result = sb.toString();
        return result;
    }
}

请帮助我,有okhttp经验的人,为什么我需要okhttp? 因为httpdient已在sdk 23中弃用,谢谢。

1 个答案:

答案 0 :(得分:0)

您没有在客户端对象上执行。请尝试添加以下代码段:

Response response = client.newCall(request).execute();
        return response.body().string();

要参考示例,请参阅以下链接:http://www.vogella.com/tutorials/JavaLibrary-OkHttp/article.html