gpt4 book ai didi

android - JSON 从 Android 发布到 Rails

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:39 26 4
gpt4 key购买 nike

我目前正在开发一个 Android 应用程序,它通过 XML 和 JSON 与 Ruby on Rails 应用程序交互。

我目前可以通过 XML 从我的网站上提取我的所有帖子,但我似乎无法通过 JSON 发布。

我的应用目前从一个看起来有点像这样的表单构建一个 JSON 对象:

{
"post": {
"other_param": "1",
"post_content": "Blah blah blah"
}
}

在我的服务器上,我相信我的 Posts Controller 中的 Create 方法设置正确: 定义创建 @post = current_user.posts.build(params[:post])

respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render json: @post, status: :created, location: @post }
format.xml { render xml: @post, status: :created, location: @post }
else
format.html { render action: "new" }
format.json { render json: @post.errors, status: :unprocessable_entity }
format.xml { render xml: @post.errors, status: :unprocessable_entity }
end
end
end

在我的 android 应用程序中,我有一个方法将我之前发布的 JSON 对象作为参数以及用于进行身份验证的用户名和密码(身份验证有效我已经测试过了,是的,简单的 HTTP 身份验证可能不是最好的选择,但它是一个快速而肮脏的修复程序),然后它通过 HTTP POST 将 JSON 对象发送到 Rails 服务器。这是那个方法:

public static void sendPost(JSONObject post, String email, String password)
{
DefaultHttpClient client = new DefaultHttpClient();
client.getCredentialsProvider().setCredentials(new AuthScope(null,-1), new UsernamePasswordCredentials(email,password));
HttpPost httpPost = new HttpPost("http://mysite.com/posts");
JSONObject holder = new JSONObject();


try {
holder.put("post", post);

StringEntity se = new StringEntity(holder.toString());
Log.d("SendPostHTTP", holder.toString());
httpPost.setEntity(se);
httpPost.setHeader("Content-Type","application/json");


} catch (UnsupportedEncodingException e) {
Log.e("Error",""+e);
e.printStackTrace();
} catch (JSONException js) {
js.printStackTrace();
}

HttpResponse response = null;

try {
response = client.execute(httpPost);
} catch (ClientProtocolException e) {
e.printStackTrace();
Log.e("ClientProtocol",""+e);
} catch (IOException e) {
e.printStackTrace();
Log.e("IO",""+e);
}

HttpEntity entity = response.getEntity();

if (entity != null) {
try {
entity.consumeContent();
} catch (IOException e) {
Log.e("IO E",""+e);
e.printStackTrace();
}
}

}

目前,当我调用此方法并将正确的 JSON 对象传递给它时,它没有执行任何操作,而且我不知道为什么或如何找出问题所在。

我的 JSON 格式仍然错误吗,其他数据真的需要那个持有者吗?还是我需要使用 HTTP POST 以外的东西?或者这只是 Rails 端的东西?不正确的路由或 Controller ?

如果有人能给我指出正确的方向,我将不胜感激,因为我不知道从这里去哪里。

最佳答案

我不喜欢 Rails,但也许是 csrf验证你必须禁用(它发生在我之前)。

您可以按照此代码检查响应的状态:

HttpResponse response = client.execute(httpPost);       
StatusLine statusLine = response.getStatusLine();
Log.i(TAG, "HTTP Status Code: " + statusLine.getStatusCode());

编辑:我有这个 JSONResponseHandler当我发出 API 请求时,这对我来说效果很好。您只需将其设置为 HttpClient 对象的执行方法中的第二个参数。响应将是一个 JSONObject,如果请求不成功,它将抛出异常。也许这可以帮助您更快地绕过这个问题。

关于android - JSON 从 Android 发布到 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8277514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com