2017-11-29 3 views
0

코드를 디버그하면 성공을 의미하는 응답 코드 200이 표시됩니다. 그럼 또한 null 응답을 받고 있어요. 다음Null 응답 받기 비동기 작업에서 응답 코드 200으로 성공을 의미합니다.

내 AsyncTask를 클래스입니다 :

나는 그것의 응답 코드 (200) 작업과 그 작동하지 JSON 형식으로하지만, 내 코드에 응답을 제공 우체부에 내 API를 테스트 한
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(); 
     } 


    }} 

.

내 문제를 이해할 수 있기를 바랍니다.

이 문제에 대한 귀하의 도움과 협조에 진심으로 감사드립니다. getEncodedQuery는()에만 documentation에서 쿼리를 반환하기 때문입니다

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

을 :

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

당신은 사용할 필요가 :

+0

실행 중'response_code'의 값은 무엇입니까? – joao86

+0

responcse_code 200 –

+0

이 나오므로 if 절이 올바르게 입력됩니까? – joao86

답변

1

문제는이 라인에서 아마

String getEncodedQuery()

이 URI에서 인코딩 된 쿼리 구성 요소를 가져옵니다. 쿼리는 쿼리 구분 기호 ('?')와 조각 구분 기호 ('#') 앞에옵니다. 이 메서드는 "http://www.google.com/search?q=android"에 대해 "q = android"를 반환합니다.


당신은 따라서 오류를 가지고 연결을 연 후 쿼리를 작성하고

업데이트되었습니다.

은 먼저 쿼리 URL을 구축해야합니다

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(); 

참고 : 나는 코드를 테스트하지 않았습니다. 따라서 자동으로 작업 할 것으로 예상하지 마십시오.

+0

선생님 말씀대로 String query = builder.build(). toString(); 결과에서 허용되지 않는 주요 문자를 가져 왔습니다. –

+0

'conn.setRequestProperty ("Content-Type", "application/json; charset = UTF-8"); ' –

+0

죄송합니다. 하지만 이것도 작동하지 않습니다 –