使用Http Request发出POST请求

时间:2013-12-05 21:07:54

标签: java android post google-api picasa

我正在通过GoogleTransport和ClientLogin进行谷歌登录。

private final GoogleTransport transport = new GoogleTransport();
private final ClientLogin authenticator = new ClientLogin();

然后我正在访问Picasa网络API。

transport.setVersionHeader(PicasaWebAlbums.VERSION);        
        transport.applicationName = "google-picasaandroidsample-1.0";
        HttpTransport.setLowLevelHttpTransport(ApacheHttpTransport.INSTANCE);
        authenticator.authTokenType = PicasaWebAlbums.AUTH_TOKEN_TYPE;
        authenticator.username = StaticVariables.USER_NAME+StaticVariables.USER_DOMAIN;
        authenticator.password = StaticVariables.USER_PASSWORD;


         try {
            authenticator.authenticate().setAuthorizationHeader(transport);
            HttpRequest request = transport.buildPostRequest();
            request.setUrl("https://picasaweb.google.com/data/feed/api/user/default");
            request.execute();
        } catch (HttpResponseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

以上工作正常。

现在我想设置一个POST请求。但是buildPostRequest()方法不支持任何String参数。因此,无法在URL上发布任何数据。怎么实现呢?请帮忙。

2 个答案:

答案 0 :(得分:0)

发布请求中的数据通常在请求正文中发送。

答案 1 :(得分:0)

您可以将HttpPostNameValuePair

一起使用
private boolean sendData(ArrayList<NameValuePair> data) {
    try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(YOUR_URL);
        httppost.setEntity(new UrlEncodedFormEntity(data));
        HttpResponse response = httpclient.execute(httppost);
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

然后使用与

不同的方法创建名称值对
private ArrayList<NameValuePair> setupData() {
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                3);
        nameValuePairs.add(new BasicNameValuePair(USERID, SAMPLE_USER_ID);
        nameValuePairs.add(new BasicNameValuePair(USERNAME, SAMPLE_USER_NAME));
        return nameValuePairs;
    }

Atlast将AsyncTaskIntent service中的发送数据方法称为sendData(setupdata())