从异步任务获取空响应使用响应代码200表示成功

时间:2017-11-29 12:05:27

标签: java android android-asynctask

当我调试我的代码时,获得响应代码200,这意味着成功。然后我也得到了空响应。

以下是我的AsyncTask类:

 private class AsyncAddfriend extends AsyncTask<String, String, String> {
    HttpURLConnection conn;
    URL url = null;

    @Override
    protected String doInBackground(String... params) {
        try {
            url = new URL("http://ishook.com/users/friends/send_friend_request_json/");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        try {
            conn = (HttpURLConnection)url.openConnection();
            conn.setReadTimeout(READ_TIMEOUT);
            conn.setConnectTimeout(CONNECTION_TIMEOUT);
            conn.setRequestMethod("POST");
            conn.setDoInput(true);
            conn.setDoOutput(true);


            Uri.Builder builder = new Uri.Builder()
                    .appendQueryParameter("sessionId", params[0])
                    .appendQueryParameter("UserId", params[1])
                    .appendQueryParameter("friendId", params[2]);
            String query = builder.build().getEncodedQuery();
            OutputStream os = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));
            writer.write(query);
            writer.flush();
            writer.close();
            os.close();
            conn.connect();

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

        try {

            int response_code = conn.getResponseCode();

            // Check if successful connection made
            if (response_code == HttpURLConnection.HTTP_OK) {

                // Read data sent from server
                InputStream input = conn.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                StringBuilder result = new StringBuilder();
                String line;

                while ((line = reader.readLine()) != null) {
                    result.append(line);
                }

                // Pass data to onPostExecute method
                return(result.toString());


            }else{

                return("unsuccessful");
            }

        } catch (IOException e) {
            e.printStackTrace();
            return "exception";
        } finally {
            conn.disconnect();
        }


    }}

我在postman中测试了我的API它使用响应代码200并以json格式提供响应但在我的代码中它不起作用。

希望你能理解我的问题。

非常感谢您在这件事上的时间和帮助。

1 个答案:

答案 0 :(得分:1)

问题可能来自这一行:

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

您需要使用:

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

这是因为getEncodedQuery()仅从documentation返回查询:

  

String getEncodedQuery()

     

从此URI获取编码的查询组件。查询位于查询分隔符('?')之后和片段分隔符('#')之前。此方法将为“http://www.google.com/search?q=android”返回“q = android”。

<强>已更新

您在打开连接后构建查询,因此您有错误。

您需要首先使用查询构建网址:

Uri uri = Uri.parse("http://ishook.com/users/friends/send_friend_request_json/")
        .buildUpon()
        .appendQueryParameter("sessionId", params[0])
        .appendQueryParameter("UserId", params[1])
        .appendQueryParameter("friendId", params[2]);
        .build();

 URL url = new URL(builtUri.toString());

 conn = (HttpURLConnection)url.openConnection();
 conn.setReadTimeout(READ_TIMEOUT);
 conn.setConnectTimeout(CONNECTION_TIMEOUT);
 conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
 conn.setRequestMethod("POST");
 conn.setDoInput(true);
 conn.setDoOutput(true);

 conn.connect();

注意:我没有测试代码。所以,不要期望它能自动运行。