Raylarım uygulamasında http 200 kodu iyi görünüyor ancak bir hata varsa denetleyicimin hatayı JSON'a iletmesini istiyorum, böylece Android uygulamamda bununla başa çıkabilirim. API json'a Http hatası yanıtları döndürme
bir oylama benim raylar sunucusunda aşağıdaki olsun başarılı ise
:Started PUT "/articles/10/dislike" for 49.199.139.48 at 2016-03-18 11:46:53 +0000
Cannot render console from 49.199.139.48! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by ArticlesController#downvote as JSON
Parameters: {"votes"=>{"votable_id"=>"10", "votable_type"=>"Article", "voter_id"=>"3", "voter_type"=>"User", "vote_flag"=>"f", "vote_weight"=>"1"}, "article"=>"10", "id"=>"10"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? ORDER BY "users"."id" ASC LIMIT 1 [["email", "[email protected]"]]
Article Load (0.3ms) SELECT "articles".* FROM "articles" WHERE "articles"."id" = ? ORDER BY "articles"."created_at" DESC LIMIT 1 [["id", 10]]
(0.3ms) SELECT COUNT(*) FROM "votes" WHERE "votes"."votable_id" = ? AND "votes"."votable_type" = ? AND "votes"."voter_id" = ? AND "votes"."voter_type" = ? AND "votes"."vote_scope" IS NULL [["votable_id", 10], ["votable_type", "Article"], ["voter_id", 3], ["voter_type", "User"]]
ActsAsVotable::Vote Load (0.4ms) SELECT "votes".* FROM "votes" WHERE "votes"."votable_id" = ? AND "votes"."votable_type" = ? AND "votes"."voter_id" = ? AND "votes"."voter_type" = ? AND "votes"."vote_scope" IS NULL ORDER BY "votes"."id" DESC LIMIT 1 [["votable_id", 10], ["votable_type", "Article"], ["voter_id", 3], ["voter_type", "User"]]
(0.1ms) begin transaction
(0.1ms) commit transaction
Completed 302 Found in 140ms (Views: 0.5ms | ActiveRecord: 84.9ms)
:
Started PUT "/articles/10/dislike" for 49.199.139.48 at 2016-03-18 11:46:08 +0000
Cannot render console from 49.199.139.48! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by ArticlesController#downvote as JSON
Parameters: {"votes"=>{"votable_id"=>"10", "votable_type"=>"Article", "voter_id"=>"3", "voter_type"=>"User", "vote_flag"=>"f", "vote_weight"=>"1"}, "article"=>"10", "id"=>"10"}
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? ORDER BY "users"."id" ASC LIMIT 1 [["email", "[email protected]"]]
Article Load (0.2ms) SELECT "articles".* FROM "articles" WHERE "articles"."id" = ? ORDER BY "articles"."created_at" DESC LIMIT 1 [["id", 10]]
(0.2ms) SELECT COUNT(*) FROM "votes" WHERE "votes"."votable_id" = ? AND "votes"."votable_type" = ? AND "votes"."voter_id" = ? AND "votes"."voter_type" = ? AND "votes"."vote_scope" IS NULL [["votable_id", 10], ["votable_type", "Article"], ["voter_id", 3], ["voter_type", "User"]]
ActsAsVotable::Vote Load (0.2ms) SELECT "votes".* FROM "votes" WHERE "votes"."votable_id" = ? AND "votes"."votable_type" = ? AND "votes"."voter_id" = ? AND "votes"."voter_type" = ? AND "votes"."vote_scope" IS NULL ORDER BY "votes"."id" DESC LIMIT 1 [["votable_id", 10], ["votable_type", "Article"], ["voter_id", 3], ["voter_type", "User"]]
(0.2ms) begin transaction
(0.1ms) commit transaction
Completed 200 OK in 12ms (Views: 0.2ms | ActiveRecord: 1.1ms)
o (kişi önce oy verildiği için) aşağıdaki alıyorum başarısız olursa
Sorun Tamamlandı 302 Bulunan yanıtı Android uygulamamıza geri gönderemiyorum. Sadece boş geri geçer.Kontrolör: Bir hata varsa
def upvote
@article.upvote_by current_user
if @article.vote_registered?
flash[:success] = "Successfully liked"
respond_to do |format|
format.html {redirect_to :back }
format.json { render json: { count: @article.get_upvotes.size } }
end
else
flash[:danger] = "You have already liked this"
respond_to do |format|
format.html {redirect_to :back }
format.json { render json: { status: :found }, status: 302 }
end
end
end
Android uygulaması oylama ve dize WebResponse uğraşan geri boş geliyor. 401 yetkisiz, 302 bulundu, vb, hala boş geri dönerse fark etmez:
Çok teşekkürler.
private class VoteTask extends UrlJsonAsyncTask {
public VoteTask(Context context) {
super(context);
}
@Override
protected JSONObject doInBackground(String... urls) {
DefaultHttpClient webClient = new DefaultHttpClient();
HttpPut put = new HttpPut(urls[0]);
JSONObject holder = new JSONObject();
JSONObject voteObj = new JSONObject();
JSONObject json = new JSONObject();
try {
try {
// setup the returned values in case
// something goes wrong
//json.put("success", false);
// json.put("info", "Something went wrong. Retry!");
//get stored values to prove the user is authorised
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String id = sharedPreferences.getString("userId", "default value");
String authToken = sharedPreferences.getString("AuthToken", "default value");
String email = sharedPreferences.getString("email", "default value");
voteObj.put("votable_id",articleId);
voteObj.put("votable_type", "Article");
voteObj.put("voter_id", id);
voteObj.put("voter_type", "User");
voteObj.put("vote_flag", voteFlag);
voteObj.put("vote_weight", "1");
holder.put("votes", voteObj);
holder.put("article", articleId);
StringEntity se = new StringEntity(holder.toString());
put.setEntity(se);
// setup the request headers
put.setHeader("Accept", "application/json");
put.setHeader("Content-Type", "application/json");
// add email and auth token to validate
put.setHeader("X-User-Email", email);
put.setHeader("X-User-Token", authToken);
//response = webClient.execute(put);
//json = new JSONObject(response);
webResponse = String.valueOf(webClient.execute(put).getStatusLine().getStatusCode());
json = new JSONObject(webResponse);
} catch (HttpResponseException e) {
e.printStackTrace();
Log.e("ClientProtocol", "" + e);
json.put("info", "Email and/or password are invalid. Retry!");
} catch (IOException e) {
e.printStackTrace();
Log.e("IO", "" + e);
}
} catch (JSONException e) {
e.printStackTrace();
Log.e("JSON", "" + e);
}
return json;
}