آموزش OkHTTP در برنامه نویسی اندروید

امتیاز 1.00 ( 1 رای )

سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش OkHTTP در برنامه نویسی اندروید می پردازیم در پست های قبلی مزیت های مربوط به okhttp را بیان کردیم در ادامه نحوه استفاده از کتاب خانه okhttp خواهیم پرداخت در ادامه با ما همراه باشید.
 
از لینک زیر می توانید از مطبی قبلی استفاده کنید.

OkHTTP چیست ؟

ابتدا باید کتاب خانه مربوط به Okhttp را به پروژه اضافه کنید.
وارد فایل build.gradle از نوع Module شده سپس در بخش dependency اضافه کنید.

compile 'com.squareup.okhttp3:okhttp:3.4.1'

پروژه را sync کنید.
وارد فایل AndroidManifest.xml شده سپس دسترسی اینترنت زیر را اضافه کنید.

<uses-permission android:name="android.permission.INTERNET"/>

بعد از اینکه دسترسی را اضافه کردید.
اگر مطلب قبلی را خوانده باشید دو نوع برای انجام درخواست وجود دارد (Synchronous  و Asynchronous )

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
    OkHttpClient client = new OkHttpClient();
    TextView txtString;
    public String url= "https://reqres.in/api/users/2";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtString= (TextView)findViewById(R.id.txtString);
        OkHttpHandler okHttpHandler= new OkHttpHandler();
        okHttpHandler.execute(url);
    }
    public class OkHttpHandler extends AsyncTask {
        OkHttpClient client = new OkHttpClient();
        @Override
        protected String doInBackground(String...params) {
            Request.Builder builder = new Request.Builder();
            builder.url(params[0]);
            Request request = builder.build();
            try {
                Response response = client.newCall(request).execute();
                return response.body().string();
            }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            txtString.setText(s);
        }
    }
}

در بالا ما با استفاده از okhttp درخواست را به یک url ارسال کردیم url مورد نظر شامل یک json است که شامل مقادیری می باشد (می توانید لینک آن را بررسی کنید). در بالا ابتدا باید از OkHttpClient یک instance ساختیم خود آن را در async قرار دادیم (از async بالا extend شده است) تا عمل request به صورت Synchronous انجام شود.
 
نمونه مثالی برای Asynchronous

package ir.programchi;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
    TextView txtString;
    public String url= "https://reqres.in/api/users/2";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtString= (TextView)findViewById(R.id.txtString);
        try {
            run();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    void run() throws IOException {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                call.cancel();
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String myResponse = response.body().string();
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        txtString.setText(myResponse);
                    }
                });
            }
        });
    }
}

در بالا از کلاس async استفاده نشده است و عمل request به صورت Asynchronous  انجام می شود. در بالا در void به نام onResponse نتیجه یا result برمیگردد .
 
اگر می خواهید مقدار یا پارامتری به سرور ارسال کنید می توانید از زیر استفاده کنید.

HttpUrl.Builder urlBuilder = HttpUrl.parse("https://httpbin.org/get).newBuilder();
urlBuilder.addQueryParameter("website", "www.orjinakteb.com");
urlBuilder.addQueryParameter("example", "android");
String url = urlBuilder.build().toString();
Request request = new Request.Builder()
                     .url(url)
                     .build();

در بالا ما دو مقدار که مقداری key آن برابر با website و example است با مقدار وبسایت سایت پر شده است و مقدار دومی برابر با اندروید است.
اگر می خواید OkHttp را با header سفارشی ارسال کنید می توانید مثل زیر عمل کنید.

Request request = new Request.Builder()
    .header("Authorization", "replace this text with your token")
    .url("your api url")
    .build();

در بالا مثلا ما می خواستیم عمل اعتبار سنجی را با سرور انجام دهیم از Header استفاده کرده ایم.
 
 
 
این آموزش هم به پایان رسید.
 
موفق و پیروز باشید.

مطالعه بیشتر