###前提・実現したいこと
AndroidアプリをHTTP通信でAPIにPOSTし、検索結果を取得したいです。
APIのPOSTメソッドをコントロールできず、さらにはAndroid側で取得情報を処理できずにつまづきました。
- Androidアプリに検索文字列を入力
- 1の入力データをAPIにPOST
- 1をAPI側で受け取り、データベースを検索し、結果をJSONに格納
- 3の情報をAndroid側で取得
まず、第一段階として、Android側から値をAPIにPOSTすることからクリアしようと考えてます。
そこで、AndroidでPOSTの処理、APIにPOSTされた値を受け取り、保存する処理を書きました。
- OKHTTPで通信処理を書いています。
- APIはRailsで製作してます。
- AndroidはJavaで書いています。
###発生している問題・エラーメッセージ
どうもAndroid側から、
値をAPIに送れません。
Android側のレスポンスの内容です。
System.out: {"status":422,"error":"Unprocessable Entity"}
###該当のソースコード
- Android:POST処理
gpsキーで、"地下一階"の値を渡す処理を書きました。
Java
1 // POST 2 private void postTest() { 3 RequestBody formBody = new FormBody.Builder() 4 .add("gps", "地下一階") 5 .build(); 6 7 Request request = new Request.Builder() 8 .url("http://candii.tk/api/v1/images/search/") 9 .post(formBody) 10 .build(); 11 12 OkHttpClient client = new OkHttpClient(); 13 client.newCall(request).enqueue(new Callback() { 14 @Override 15 public void onFailure(Call call, IOException e) { 16 failMessage(); 17 e.printStackTrace(); 18 } 19 20 @Override 21 public void onResponse(Call call, Response response) throws IOException { 22 res = response.body().string(); 23 System.out.println("res"); 24 System.out.println(res); ①上記のエラーを吐き出した部分です。 25 System.out.println("res"); 26 runOnUiThread(new Runnable() { 27 public void run() { 28 ListImage userEntity = gson.fromJson(res, ListImage.class); 29 System.out.println("userEntity"); 30 System.out.println(userEntity); 31 System.out.println("userEntity"); 32 textViewRes.setText("d"); 33 textViewDes.setText("No Data"); 34 } 35 }); 36 } 37 }); 38 }
- API:POSTされた値を受けとります。
@imageデータは保存されていませんでした。
Ruby
1module Api 2 module V1 3 class ImagesController < ApplicationController 4 5 def index 6 @images = Image.all 7 render json: @images 8 end 9 10 def search 11 12 @image = Image.new(image_params) 13 @image.loation = params[:gps] ①POSTされた情報を受け取ります。 14 @image.save! 15 16 end 17 18 private 19 20 def image_params 21 params.require(:image).permit(:en_title, :ja_title, :en_content, :ja_content, :url, :location) 22 end 23 24 end 25 end 26end
API:ルーティング
ruby
1Rails.application.routes.draw do 2 3 root 'images#index' 4 5 namespace :api, { format: 'json' } do 6 namespace :v1, { format: 'json' } do 7 post 'images/search' 8 9 resources :images, :only => [:index] 10 resources :movies 11 end 12 end 13 14 resources :images 15 resources :movies 16 17 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 18end
だいぶ疑問のあるコードだとは思うんですが、
なぜ、API側で@imageが保存されていないのかご指摘いただければと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。