3

我是新来的,如果我不能很好地表达自己或我的英语,我想先找借口!

事实上,我正在开发一个项目,该项目应该从 Firebird 数据库中获取字节数组并在 android 上表示它们。所以我决定使用一个带有从数据库中获取这些数据的方法的restful webservice,然后使用android客户端来检索它们。

我怎样才能将这些字节写入文本文件,然后使用 android 客户端获取它!

Web 服务上的方法如下所示:

 @GET
    @Path("daten/{id}")
    @Produces("text/plain")
  *// Instead of byte[] I wanted to return a file because this doesn't work*
    public byte[] getDaten(@PathParam("id") String id){
      Tbpatereignis res= (Tbpatereignis) em.createQuery("select erg from Tbpatereignis as erg where erg.vcereignis= :ekgtyp and erg.vcpatsur.vcsurrogat= :id ").setParameter("ekgtyp", "UREKG").setParameter("id", id).getResultList().get(0);

      return res.getBldivers();
    }

然后我怎样才能从一个安静的网络服务中检索这个文件并稍后在 android 上使用它?

感谢您的帮助!

4

2 回答 2

1

你应该使用@Produces("application/octet-stream") 而不是@Produces("text/plain")。在 android 客户端中,您可以使用 httpclient 或 URLConnection 发出 http 请求。

URLConnection 从服务器获取图像的示例代码:

URL url = new URL(urlStr);
URLConnection connection = url.openConnection();
Bitmap bmp=BitmapFactory.decodeStream(connection.getInputStream());
于 2012-09-15T08:30:43.223 回答
0

您可以使用 MediaType.APPLICATION_OCTET_STREAM 直接从数据库中获取字节数组。

在服务器(端点)端:

@GET
  @Path("fetch-image")
  @Produces(MediaType.APPLICATION_OCTET_STREAM)
  public Response getImageArray(
    @HeaderParam(IMAGE_ID) String image_id) {

    // return image requested as byte array
    return Response.ok(MyDBFunctions.fetchImage(image_id), MediaType.APPLICATION_OCTET_STREAM);
  }

在 Android(消费者)方面:

public <T> T getImage(Class<T> responseType, String image_id) throws ClientErrorException {
        Client client = ClientBuilder.newClient());
        WebTarget webTarget = client.target(BASE_URI).path("fetch-image");

        // return image as byte array
        return webTarget.request(MediaType.APPLICATION_OCTET_STREAM)
                .header(IMAGE_ID, image_id)
                .get(responseType);
    }

最后,加载图像:

Response resp = data.getImage(Response.class, image_id);
                if (resp.getStatus() == HTTP_STATUS_OK) {
                    // load image from server
                    image = resp.readEntity(byte[].class);
                }
                resp.close();
于 2017-02-12T07:36:09.040 回答