我怎样才能在Android上发帖?

时间:2011-01-20 09:11:34

标签: java android http-post

我使用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 个答案:

答案 0 :(得分:2)

我认为UrlEncodedFormEntity构造函数将编码作为第二个参数。否则,脱下袖口,这看起来不错。您可以在服务器日志中查看您为这些请求收到的内容。如果您使用的是模拟器,您还可以确保您的模拟器具有Internet连接(即,具有两个信号强度条)。

以下是使用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);
    }
}