2016-09-29 129 views
0

好吧,所以我有以下情況,我有一個Java應用程序,用戶可以登錄,一旦他們這樣做會產生一個隨機密鑰,我希望發送這個密鑰到我的網站使用http請求。Android的HTTP請求與發佈數據

在網絡端,我將它插入到數據庫中供以後使用,這已經在工作。

現在在這個時刻我非常喜歡java端。我使用下面的代碼來嘗試HTTP請求:

private void startRegistration(String username, String password) { 

    String myRandomString = randomString(6); 
    String deviceId = "abc"; 
    startToast(myRandomString); 

    try { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
     insertDevice(myRandomString, deviceId); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

@TargetApi(Build.VERSION_CODES.KITKAT) 
public void insertDevice(String randomString, String deviceId) throws IOException { 

//  String urlParameters = "key=" + randomString + "&device_id="+ deviceId; 
//  byte[] postData  = urlParameters.getBytes(StandardCharsets.UTF_8); 
//  int postDataLength = postData.length; 
    String request  = "http://website.com/test"; 
    URL url   = new URL(request); 

    HttpURLConnection conn= (HttpURLConnection) url.openConnection(); 
     conn.setDoOutput(true); 
     conn.setInstanceFollowRedirects(false); 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     conn.setRequestProperty("charset", "utf-8"); 
//   conn.setRequestProperty("Content-Length", Integer.toString(postDataLength)); 
     conn.setUseCaches(false); 

    try(DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) { 
//   wr.write(postData); 
     Context context = getApplicationContext(); 
     int duration = Toast.LENGTH_SHORT; 

     Toast toast = Toast.makeText(context, "test", duration); 
     toast.show(); 
     } 
    } 

在網絡方面我有一個路徑設置爲抓住這一請求,並簡單的拋出一個日誌::信息,以便我可以檢查是否請求甚至還未獲得在那裏,這看起來像如下:

public function create() { 

    Log::info('I got here, hurray!'); 
} 

現在當我打的網址在瀏覽器中,我可以看到日誌出現,當我用我的應用程序,我不知道。但是也沒有錯誤。

最後,我想使用POST請求,並將隨機密鑰和設備ID都發送到網站。任何幫助,非常感謝

+0

您可以使用[OkHttp(HTTP://方.github.io/okhttp /)庫。這會讓你的任務更容易。 – pike

+0

http://stackoverflow.com/questions/11766878/sending-files-using-post-with-httpurlconnection下面的鏈接將幫助你 – Anjali

+0

你似乎沒有調用'conn.connect()'... – injecteer

回答

1

您正在設置連接,但你沒有觸發請求。你可以通過調用conn.connect()或「依賴於連接的操作」執行請求(javadoc

下面是一個POST請求的例子:

public void insertDevice(String randomString, String deviceId) { 

    String request = "http://website.com/test"; 
    URL url = new URL(request); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

    conn.setRequestMethod("POST"); 

    String urlParameters = "key=" + randomString + "&device_id=" + deviceId; 
    byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8); 

    conn.setDoOutput(true); 

    try (OutputStream os = conn.getOutputStream()) { 
     os.write(postData); 
    } 

    conn.connect(); 

    // Get response code, e.g. 200. 
    // conn.getResponseCode(); 

    // Read server response data with conn.getInputStream() or conn.getErrorStream(). 

    conn.disconnect(); 
} 
+0

可悲的是這仍然不會在Web服務器上彈出我的日誌,但也不會引發任何錯誤。 – killstreet

+0

@killstreet甚至沒有固定版本o GET命中服務器? – nandsito

+0

沒關係,它正在工作只是服務器日誌有點延遲,你是驚人的:)非常感謝你! – killstreet