权限
依赖
compile 'com.squareup.okhttp3:okhttp:3.6.0' compile 'com.squareup.okio:okio:1.11.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'
//工具类
import android.os.Handler; import android.os.Looper; import java.io.IOException; import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.logging.HttpLoggingInterceptor; import static okhttp3.internal.Internal.instance; /** * Created by on 2018/4/26. */ public class Untils { private OkHttpClient okHttpClient; private static Untils instance; private Handler handler=new Handler(); public Untils() { HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); okHttpClient = new OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS)//连接超时 .writeTimeout(20, TimeUnit.SECONDS)//写入超时 .readTimeout(20, TimeUnit.SECONDS)//读取超时 .addInterceptor(new MyInterceptor()) .addInterceptor(logging) .build(); handler = new Handler(Looper.getMainLooper()); } public static Untils getInstance() { if (instance == null) { instance = new Untils(); } return instance; } /** * GET请求 * * @param url */ public void doGet(String url, final Onnetlisteener onNetListener) { //创建Request final Request request = new Request.Builder() .url(url) .build(); //发送请求 okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { onNetListener.onFailed(e); } }); } @Override public void onResponse(Call call, Response response) throws IOException { //拿到服务器返回的数据 final String string = response.body().string(); handler.post(new Runnable() { @Override public void run() { onNetListener.onSuccess(string); } }); } }); } }
//接口 Api 类
package com.bawei.demo5; /** * Created by 王利博 on 2018/4/26. */ public class Api { public static final String url="https://www.zhaoapi.cn/user/login"; }
//Mainactivity 和 接口
package com.bawei.demo5; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements LoginView, View.OnClickListener { /** * 账号 */ private EditText name; /** * 账号 */ private EditText pwd; /** * 登录 */ private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } @Override public String getname() { return name.getText().toString(); } @Override public String getpwd() { return pwd.getText().toString(); } @Override public void showdata(String str) { Toast.makeText(this,str,Toast.LENGTH_SHORT).show(); } private void initView() { name = (EditText) findViewById(R.id.name); pwd = (EditText) findViewById(R.id.pwd); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { default: break; case R.id.btn: new per(this).login(); break; } } }
//接口
package com.bawei.demo5; /** * Created by 王利博 on 2018/4/26. */ public interface LoginView { String getname(); String getpwd(); void showdata(String str); }
//molde 和接口
package com.bawei.demo5; /** * Created by 王利博 on 2018/4/26. */ public class modle implements mo { @Override public void login(String url, final Onnetlisteener onnetlisteener) { Untils.getInstance().doGet(url, new Onnetlisteener() { @Override public void onSuccess(String result) { onnetlisteener.onSuccess(result); } @Override public void onFailed(Exception e) { onnetlisteener.onFailed(e); } }); } }
package com.bawei.demo5; /** * Created by 王利博 on 2018/4/26. */ public interface mo { void login( String url,Onnetlisteener onnetlisteener); }
//onnetlistener 接口
package com.bawei.demo5; /** * Created by 王利博 on 2018/4/26. */ public interface Onnetlisteener { void onSuccess(String result); void onFailed(Exception e); }
//p层的 接口和代码
package com.bawei.demo5; import java.security.acl.LastOwnerException; /** * Created by 王利博 on 2018/4/26. */ public class per implements pe{ private LoginView loginView; private mo m; public per(LoginView loginView) { this.loginView = loginView; m=new modle(); } @Override public void login() { String getname = loginView.getname(); String getpwd = loginView.getpwd(); m.login(Api.url + "?mobile=" + getname + "&password=" + getpwd, new Onnetlisteener() { @Override public void onSuccess(String result) { loginView.showdata(result); } @Override public void onFailed(Exception e) { loginView.showdata(e+""); } }); } }
接口
package com.bawei.demo5; /** * Created by 王利博 on 2018/4/26. */ public interface pe { void login(); }
//拦截器
package com.bawei.demo5; import java.io.IOException; import okhttp3.HttpUrl; import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response; /** * Created by 王利博 on 2018/4/26. */ public class MyInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Response response; Request originRequest = chain.request(); HttpUrl httpUrl = originRequest.url() .newBuilder() .addQueryParameter("source", "android") .build(); Request request = new Request.Builder().url(httpUrl).build(); //发送请求 response = chain.proceed(request); return response; } }