JSONをPOST送信→サーバーから認証キーがくる→認証キーを付けてデータをPOST送信
という処理の流れを考えています。
HTTP通信はokHttpの同期通信をAsyncタスクを継承したクラスで使用しています。
ここで質問なのですが
最初の認証キーを得るためのPOST送信と、認証キーをつけてデータをPOST送信する
時はContent-Typeも違うしヘッダーにAuthorizationがついたりつかなったりで色々異なります。
まず
Content-Typeは引数paramsに入れれば動的に変えることができますが、
ヘッダーにAuthorizationをつけたり付けなかったりというのはどういう風に
するのがベターでしょうか?
自分が思いついたのがparamsに条件を与えてif分でnew Request.Builder部分を
分岐する方法ですが、あまりスマートじゃない気がしてます。
そもそもparamsにいくつも引数を与えるのもあまりいいような気がしていません。
それともう一つサーバーからの認証キーを受けて、認証キーを付けてデータをpost通信する必要がありますが、MainActivityの応答を受けるonPostExecuteでまたHttpPostTaskをnewするというやり方は普通じゃない気がするのですが、この辺りもいい方法があったら教えていただきたいです。
java
1 protected String doInBackground(String... params) { 2 String result = ""; 3 4 try { 5 // リクエストボディを作る 6 RequestBody requestBody = RequestBody.create( 7 MediaType.parse(params[0]), params[1] 8 ); 9 10 // リクエストオブジェクト 11 Request request = new Request.Builder() 12 .url(post_url) 13 .header("Authorization", params[2]) 14 .post(requestBody) 15 .build(); 16 17 // クライアントオブジェクトを作って 18 OkHttpClient client = new OkHttpClient(); 19 20 // リクエストして結果を受け取って 21 try { 22 Response response = client.newCall(request).execute(); 23 result = response.body().string(); 24 } catch (IOException e) { 25 e.printStackTrace(); 26 } 27 Log.d("tag",params[0]); 28 29 } catch (Exception e) { 30 e.printStackTrace(); 31 } 32 return result; 33 }
MainActivityの処理
java
1 public void httpPostEditOp(){ 2 // 接続先のURLを指定してHTTP POST実行 3 String url = "http://***"; 4 JSONObject jsonobject = new JSONObject(); 5 6 try { 7//jsonデータを入れる 8 } catch (JSONException e) { 9 e.printStackTrace(); 10 } 11 12 HttpPostTask httpPostTaskt = new HttpPostTask(this, url, new HttpPostTask.HttpPostCallback() { 13 public void onPreExecute() { 14 // do something 15 } 16 public void onProgressUpdate(int progress) { 17 // do something 18 } 19 public void onPostExecute(String result) { 20 // do something 21 //更新閉じる 22 } 23 public void onCancelled() { 24 // do something 25 } 26 }); 27 28 httpPostTaskt.execute("application/json; charset=utf-8",jsonobject.toString(),""); 29 }
あなたの回答
tips
プレビュー