久々にandroidJavaの記事を書きます。今回はOkHttpを使った非同期通信についての記事になります。
androidの非同期通信と言えばURLConnectionが代表的に挙げられ、自分も今までURLConnectionで非同期通信をしていましたがこれが
中々長ったらしくてactivityを分けて書いたりと面倒くさいことづくしでした。
これ毎回書くの嫌だなーって思ってたのですが、最近になってOkHttpという非同期通信の存在を知りました。
リファレンスを見ると、重くなりがちな通信を既存のメソッドを減らすことで速度を向上させるために作られたライブラリみたいです。
メソッドが減るということは当然可読化も改善して作りやすくなったってことですよね。という訳で試しにOkHttpを使った非同期通信を
書いてみました。javaScriptでajaxやfetchで慣れ親しんできた自分としてはすごく楽になったなーと感じるコードになりました。
public class MainActivity extends AppCompatActivity { private EditText Text1,Text2; private static String TAG = "try"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Text1 = findViewById(R.id.Text1); Text2 = findViewById(R.id.Text2); Button button = findViewById(R.id.LoginBtn); button.setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.N) public void onClick(View view) { String url = "http://ここに叩きたいAPI.php"; String yourname = Text1.getText().toString(); String yourcountry = Text2.getText().toString(); RequestBody formBody = new FormBody.Builder() .add("name", "yourname") .add("country", "yourcountry") .build(); Request request = new Request.Builder() .url(url) .post(formBody) .build(); OkHttpClient client = new OkHttpClient(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { System.out.println("fialer!!"); } @Override public void onResponse(Call call, Response response) throws IOException { System.out.println("response: " + response.body().string()); } }); } }); } }
まず、String urlで叩きたいAPIを宣言します。どの形式にしろ必須です。
次に、postしたいeditTextを変数に格納しています。画像や音声ファイルでも送信は可能ですが、ここではテキストにしています。
次のRequestBody formBody = new FormBody.Builder()ですがここが肝になってきます。
キーに該当するテキストのワードを送って、最後にrequestBodyに送れるようにbuild()しています。これがないとrequestで送る時に
bodyに定義できないので、必ずここでビルディングしておきましょう。
最後にrequestBuilderオブジェクトでurlとpostを定義して送信準備完了です!コールバックのところはそのまま公式からとってきたので省
略します。(すみません)
フルコードで載せたので、androidStudioのバージョンが極端に古くなければ動くと思います。
これからOkHttp通信を実装するか考えてるけどどのサイトも書いてあることが断片的で分からない!という方はこれを参考にしていただ
ければ幸いです。それではまた。