我正在尝试使用WebServices将图像从Android应用程序发送到Java应用程序。
在服务器端,我有这个代码,使用Postman作为客户端可以正常工作:
@Path("/report")
public class ReportService {
@PUT
@Path("/put")
@Consumes(MediaType.APPLICATION_JSON)
public Report saveReport(String json){
return ReportDAO.saveReport(json);
}
另一方面,我有我的Android应用程序试图将图像上传到服务器:
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查看响应中的内容时,我得到一个空字符串。
在邮递员上复制网址并将“http://10.0.2.2:8080”交换为“http://localhost:8080”正在到达服务器,但不是来自我的Android应用程序。
感谢您的帮助!
答案 0 :(得分:1)
正如你所说
复制网址并交换" http://10.0.2.2:8080"到" http://localhost:8080"在Postman上到达服务器但不是从我的Android应用程序。
我认为您的网络服务与邮递员在同一台机器上。那是你的问题。
您需要创建一个服务器,将服务公开给您的本地网络端口。或者您需要一个公共IP托管服务。
您的代码很好,需要通过Internet或本地网络公开,并获取网络路径。只有这样才能奏效。
您无法在其他网络中找到自己的电脑,现在可以吗?这是客户端服务器通信和网络的基础。
答案 1 :(得分:1)
你必须检查你的android studio虚拟设备和你的服务器是否在同一个子网中,以便你可以访问它。
您必须将网络从计算机公开到虚拟设备才能使其正常工作。