В настоящее время я работаю над приложением для Android, которое взаимодействует с приложением Ruby on Rails через XML и JSON.
В настоящее время я могу извлекать все свои сообщения со своего веб-сайта через XML, но, похоже, не могуpost через JSON.
В настоящее время мое приложение создает объект JSON из формы, которая выглядит примерно так:
{
"post": {
"other_param": "1",
"post_content": "Blah blah blah"
}
}
На моем сервере я считаю, что метод Create в моем контроллере сообщений - этоустановить правильно: def 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-аутентификация, вероятно, не лучший выбор, но это быстрое и грязное исправление), и затем он отправляет объект JSON через HTTP POST врельсы сервер.Вот этот метод:
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?Неправильный маршрут или диспетчер?
Буду очень признателен, если кто-нибудь укажет мне правильное направление, потому что я не знаю, куда идти отсюда.