2

我被卡在兩者之間。我想要使​​用HttpUrlConnection實現一個POST方法來發布用於註冊用戶到服務器的電子郵件,名稱和密碼。 這裏是我的代碼:使用HttpUrlConnection向服務器發送請求

public void createNewProfile(View view){ 

    new Post().execute("http://myurl.com"); 

} 

private class Post extends AsyncTask<String, Void, String>{ 

    @Override 
    protected String doInBackground(String... params) { 

     try { 

      URL url = new URL("http://myurl.com"); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

      conn.setRequestMethod("POST"); 
      conn.setDoInput(true); 
      conn.setDoOutput(true); 

      ContentValues values = new ContentValues(); 
      values.put("email", "[email protected].com"); 
      values.put("password", 123); 
      values.put("name","ABC"); 

      OutputStream os = conn.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, "UTF-8")); 
      writer.write(getQuery(values)); 
      writer.flush(); 
      writer.close(); 
      os.close(); 
      response = conn.getResponseCode(); 
      conn.connect(); 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      Log.i("Result",String.valueOf(e)); 
     } 
     return null; 
    } 

    private String getQuery(ContentValues values) throws UnsupportedEncodingException 
    { 
     StringBuilder result = new StringBuilder(); 
     boolean first = true; 

     for (Map.Entry<String, Object> entry : values.valueSet()) 
     { 
      if (first) 
       first = false; 
      else 
       result.append("&"); 

      result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
      result.append("="); 
      result.append(URLEncoder.encode(String.valueOf(entry.getValue()), "UTF-8")); 
     } 

     Log.i("Result",result.toString() +" "+ String.valueOf(response)); 

     return result.toString(); 
    } 
} 

我不知道我會犯錯。我收到以下回應

name=ABC&email=abc%40xyz.com&password=123 0 

其中空格後面的「0」是由http響應代碼返回的響應代碼。 雖然我在瀏覽器中嘗試它時我的URL是正確的。 我不知道我在哪裏犯錯;這是我的服務器故障還是我的代碼有錯誤,因爲我認爲我的代碼沒有任何交互處理。

我是Android Developement的初學者,嘗試了很多次和不同的代碼,但是出現錯誤。

請幫忙! 在此先感謝。

+0

嘗試得到響應的最後陳述後關閉作家 –

+0

將它設置低於響應= conn.getResponseCode()和conn.connect(),但再次相同的反應,也我刪除了,但同樣的迴應。 – Swr7der

+0

我已經添加了我的代碼以供參考...檢查並讓我知道它是否有幫助 –

回答

1

嘗試是這樣的:

try { 
    url = new URL(params[0]); 
    httpURLConnection = (HttpURLConnection) url.openConnection(); 
    httpURLConnection.setDoInput(true); 
    httpURLConnection.setDoOutput(true); 
    httpURLConnection.setRequestMethod("POST"); 



    outputStream = httpURLConnection.getOutputStream(); 

    bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream)); 
    bufferedWriter.write(myValues); 
    bufferedWriter.flush(); 

    int statusCode = httpURLConnection.getResponseCode(); 
    Log.d(Constants.LOG_TAG, " The status code is " + statusCode); 

    if (statusCode == 200) { 
     inputStream = new BufferedInputStream(httpURLConnection.getInputStream()); 
     response = convertInputStreamToString(inputStream); 
     Log.d(Constants.LOG_TAG, "The response is " + response); 

     JSONObject jsonObject = new JSONObject(response); 

return true; 

    } else { 
     return false; 
    } 

} catch (Exception e) { 

    e.printStackTrace(); 
} finally { 
    try { 
     if (inputStream != null) { 
      inputStream.close(); 
     } 
     if (outputStream != null) { 
      outputStream.close(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

我現在從此代碼獲得響應代碼405。而當我把inputStream運行任何響應代碼,然後再次fileNotFoundException。我輸入的數據表單還是服務器端的錯誤?我應該嘗試凌空這個嗎? – Swr7der

+0

你可以嘗試凌空..但我認爲你的網址或服務器端代碼有問題 –

+0

你確定代碼沒有問題嗎?我可以使用此POST請求將特定用戶註冊到API網址嗎? – Swr7der