2016-09-29 11 views
0

좋아요. 다음 상황이 발생하므로, 사용자가 로그인 할 수있는 자바 앱이 있습니다. 일단 임의의 키가 생성되면 http 요청을 사용하여 내 웹 사이트에이 키를 보내려고합니다. .게시물 데이터가있는 Android 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(); 
     } 
    } 

나는 경로가이 요청을 잡으려고 설정하고 간단한 가지고있는 웹 측면에서 로그 :: 정보를 던졌습니다 : 나는 HTTP 요청을 시도하는 다음 코드를 사용하고 거기에,이 다음과 같습니다 : 내 브라우저에서 URL을 쳤을 때

public function create() { 

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

지금 나는 내 응용 프로그램을 사용할 때, 그렇게하지, 로그가 나타나는 볼 수 있습니다. 그러나 아무런 오류도 발생하지 않습니다.

마지막으로 POST 요청을 사용하여 임의의 키와 장치 ID를 웹 사이트에 보내고 싶습니다. 어떤 도움을 많이 주신 경우

+0

당신이 [OkHttp] 사용할 수 있습니다 (HTTP : // 사각형 당신은 (javadoc)

다음

는 POST 요청의 예 "연결되는에 따라 작업을"conn.connect() 전화하거나하여 요청을 수행 할 수 있습니다 .github.io/okhttp /) 라이브러리. 그렇게하면 작업을 훨씬 쉽게 할 수 있습니다. – pike

+0

http://stackoverflow.com/questions/11766878/sending-files-using-post-with-httpurlconnection 다음 링크는 당신을 도울 것입니다 – Anjali

+0

당신은'conn.connect()'를 호출하지 않는 것 같습니다 ... – injecteer

답변

1

연결을 설정하고 있지만 요청을 트리거하지 않습니다.

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

슬프게도 이 여전히 웹 서버에서 내 로그를 팝하지 않지만 오류가 throw됩니다. – killstreet

+0

@killstreet도 고정 버전이 아닙니다. 서버에 충돌합니까? – nandsito

+0

전혀 신경 쓰지 마라, 단지 서버 로그에 조금 지연이 있었다, 당신은 훌륭하다 :) 고마워요! – killstreet