如何将文件文件/ zip文件从Restful服务器发送到Android客户端

时间:2012-10-01 21:08:31

标签: android web-services rest

我想再问我的问题。 我正在开发一个可以从Android访问的宁静的Web服务,但我有一个问题,因为2周。 我想编写一个服务,从数据库中获取一些字节数组并将其写入文件,以便我可以从android使用此服务。 使用Android我想获取此文件,然后使用此字节绘制图形。

请你给我一些提示!!

谢谢

1 个答案:

答案 0 :(得分:1)

Web API在您的情况下是一个不错的选择,因为使用它非常简单,您只需要发送一个简单的流。然后在您的应用程序中创建自己的RestClient以使用Web服务,这里您使用了一些代码HttpClient用于执行此操作:

public void executeRequest(HttpUriRequest request, String url)  {
    HttpClient client = new DefaultHttpClient();
    HttpResponse httpResponse;

    try{
       httpResponse = client.execute(request);
       responseCode = httpResponse.getStatusLine().getStatusCode();

       HttpEntity entity = httpResponse.getEntity();
       if (entity != null)
       {
           InputStream in = entity.getContent();
           response = convertStreamToString(in);
           in.close();
       }
    } catch (ClientProtocolException e)  {
        client.getConnectionManager().shutdown();
        e.printStackTrace();
    } catch (IOException e) {
        client.getConnectionManager().shutdown();
        e.printStackTrace();
    }       
}

private static String convertStreamToString(InputStream is) {

    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}

有了这个,您可以传递GET请求以获取所需的数据,如果您需要向查询字符串添加一些额外的参数,这也应该是好的:

public void Execute(RequestMethod method) throws Exception
    {

                String combinedParams = "";
                if  (!params.isEmpty())
                {
                    combinedParams += "?";

                    for (NameValuePair p : params)
                    {
                        String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),"UTF-8");

                        if  (combinedParams.length() > 1)
                            combinedParams += "&" + paramString;
                        else
                            combinedParams += paramString;
                    }
                }

                HttpGet request = new HttpGet(url + combinedParams);

                for (NameValuePair h : headers)
                    request.addHeader(h.getName(),h.getValue());

                executeRequest(request, url);