Как я могу опубликовать в Android? - PullRequest
0 голосов
/ 20 января 2011

Я использовал Android API, чтобы отправить некоторые данные, используя метод HTTP POST:

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://myapp.com/");

        try {
            List parameters = prepareHttpParameters();
            HttpEntity entity = new UrlEncodedFormEntity(parameters);
            httppost.setEntity(entity);

            ResponseHandler responseHandler = new BasicResponseHandler();
            response = httpclient.execute(httppost, responseHandler);

            Toast.makeText(this, response, Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            // TODO: manage ClientProtocolException and IOException
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        }

, и мои параметры подготовлены здесь:

List parameters = new ArrayList(2);
parameters.add(new BasicNameValuePair("usr", "foo" ));
parameters.add(new BasicNameValuePair("pwd", "bar" ));
return parameters;

Но, похоже, это неправильно, потому чтоЯ не получаю ожидаемого ответа.

Я протестировал один и тот же запрос с теми же параметрами, используя Curl, и получил ожидаемый ответ.

Я ошибся в своем коде?

Большое спасибо

1 Ответ

2 голосов
/ 20 января 2011

Я бы рассмотрел конструктор UrlEncodedFormEntity, который принимает кодировку как второй параметр. В противном случае, с манжеты, это выглядит нормально. Вы можете проверить в журналах своего сервера, что вы получаете для этих запросов. Вы также можете убедиться, что ваш эмулятор имеет подключение к Интернету (то есть имеет две полосы мощности сигнала), если вы используете эмулятор.

Вот соответствующая часть примера приложения, которое использует HTTP POST (и настраиваемый заголовок) для обновления статуса пользователя на identi.ca:

.
private String getCredentials() {
    String u=user.getText().toString();
    String p=password.getText().toString();

    return(Base64.encodeBytes((u+":"+p).getBytes()));
}

private void updateStatus() {
    try {
        String s=status.getText().toString();

        HttpPost post=new HttpPost("https://identi.ca/api/statuses/update.json");

        post.addHeader("Authorization",
                                     "Basic "+getCredentials());

        List<NameValuePair> form=new ArrayList<NameValuePair>();

        form.add(new BasicNameValuePair("status", s));

        post.setEntity(new UrlEncodedFormEntity(form, HTTP.UTF_8));

        ResponseHandler<String> responseHandler=new BasicResponseHandler();
        String responseBody=client.execute(post, responseHandler);
        JSONObject response=new JSONObject(responseBody);
    }
    catch (Throwable t) {
        Log.e("Patchy", "Exception in updateStatus()", t);
        goBlooey(t);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...