2017-10-23 4 views
0

Android 앱에서 WebServices를 사용하여 Java 응용 프로그램으로 이미지를 보내려고합니다. 서버 측에 Android에서 HttpPut이 작동하지 않습니다.

나는이 코드를 가지고 있고 그것은 클라이언트로 우편 배달부를 사용하여 잘 작동 : 나는 서버에 이미지를 업로드하려고 내 안드로이드 응용 프로그램이있는 반면에

@Path("/report") 
public class ReportService { 

@PUT 
@Path("/put") 
@Consumes(MediaType.APPLICATION_JSON) 
public Report saveReport(String json){ 
    return ReportDAO.saveReport(json); 
} 

:

try { 
      //Encode the image 
      String imagenPath = params[1]; 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      Bitmap myBitmap = BitmapFactory.decodeFile(imagenPath); 
      myBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 
      byte[] imageBytes = baos.toByteArray(); 
      String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 

      //Create client,set url and entity 
      HttpClient httpClient = new DefaultHttpClient(); 

      StringEntity entity = new StringEntity(encodedImage); 

      HttpPut httpPut = new HttpPut("http://10.0.2.2:8080/xxx/rest/report/put"); 
      httpPut.setEntity(entity); 

      HttpResponse response = httpClient.execute(httpPut); 
      HttpEntity resp = response.getEntity(); 

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

Android Studio의 가상 장치를 사용 중이며 GET 메소드로 제대로 작동하지만 POST/PUT으로 실패합니다.

아무런 예외가 없으며 메서드가 서버에 도달하지도 않습니다. EntityUtils를 사용하여 응답의 내용을 확인하면 빈 문자열이 표시됩니다.

우편함의 URL을 복사하고 "http://10.0.2.2:8080"을 (를) "http://localhost:8080"(으)로 바꾸는 것은 서버에 있지만 내 Android 응용 프로그램에는 도달하지 못했습니다.

도움 주셔서 감사합니다.

답변

1

당신이 URL을 복사 내 안드로이드 응용 프로그램에서 서버 아니라 도달하고 우체부 페이지의 "http://localhost:8080" "http://10.0.2.2:8080"를 교환

말했듯이.

귀하의 웹 서비스가 귀하의 우편 배달부와 동일한 기계에 있다고 가정합니다. 그것이 당신의 문제입니다.

로컬 네트워크 포트에 서비스를 제공하는 서버를 만들어야합니다. 또는 공인 IP 호스팅 서비스가 필요합니다.

코드가 정상이므로 인터넷이나 로컬 네트워크를 통해 공개적으로 노출되어 네트워크 경로를 가져와야합니다. 그래야만 작동 할 것입니다.

다른 네트워크에서 PC를 찾을 수 없으십니까? 이것은 클라이언트 서버 통신 및 네트워킹의 ABC입니다.

+0

동일한 컴퓨터에서 서버와 가상 장치를 실행하고 있습니다. 실제 장치를 사용하기 전에이 통신을 테스트하고 있습니다. 왜 내가 http://10.0.2.2:8080/xxx/rest/user/get/{name}을 소비 할 수 있는지는 모르겠지만 PUT/POST 방법은 아닙니다. 네트워크에 문제가 있으면 메소드를 가져 오지 않아야합니까? Ty – Marcks1

+0

답장을 보내려면 포트에서 인바운드 및 아웃 바운드 트래픽을 확인해야합니다 (존재하지 않는 경우). 방화벽 규칙을 추가하십시오. 또한 우편 배달부를 통해 확인하십시오. –

1

당신은 거기에 액세스 할 수 있도록 귀하의 안드로이드 스튜디오 가상 장치와 서버가 동일한 서브넷에 있는지 확인해야합니다.

컴퓨터를 가상 장치에 노출시켜야 작동합니다.

관련 문제