Question

I'm making a google login through GoogleTransport and ClientLogin.

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

Then I'm accessing the Picasa web 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();
        } 

The above is working fine.

Now I want to set a POST request. But buildPostRequest() method does not support any String parameter. So, unable to post any data at the URL. How to achieve it? Please help.

Était-ce utile?

La solution

You may use HttpPost with NameValuePair

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;
    }
}

Then create your Name Value pairs in a different method as

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 call the send data method in an AsyncTask or Intent service as sendData(setupdata())

Autres conseils

Data in a post request is usually sent in the body of the request.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top