packagethonlon.example.cn.simpleokhttpdemo;importandroid.app.Activity;importandroid.app.Application;importandroid.os.Bundle;importandroid.support.v7.app.AppCompatActivity;importandroid.view.View;importandroid.widget.Button;importandroid.widget.TextView;importandroid.widget.Toast;importjava.io.IOException;importokhttp3.Call;importokhttp3.Callback;importokhttp3.FormBody;importokhttp3.OkHttpClient;importokhttp3.Request;importokhttp3.Response;public class MainActivity extends AppCompatActivity implementsView.OnClickListener {privateTextView tv;privateButton btn_async_request, btn_sync_request, btn_async_post, btn_sync_post;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}/*** 初始化视图*/
public voidinitView() {
tv=(TextView) findViewById(R.id.tv);
btn_async_request=(Button) findViewById(R.id.btn_async_request);
btn_sync_request=(Button) findViewById(R.id.btn_sync_request);
btn_async_post=(Button) findViewById(R.id.btn_async_post);
btn_sync_post=(Button) findViewById(R.id.btn_sync_post);
btn_async_request.setOnClickListener(this);
btn_sync_request.setOnClickListener(this);
btn_async_post.setOnClickListener(this);
btn_sync_post.setOnClickListener(this);
}/*** 点击事件
*@paramview*/@Overridepublic voidonClick(View view) {switch(view.getId()) {case R.id.btn_async_request://执行get方式的异步请求
getAsyncRequest();break;case R.id.btn_sync_request://执行get方式的同步请求
getSyncRequest();break;case R.id.btn_async_post://执行post方式的异步请求
postAsynsRequest();break;case R.id.btn_sync_post://执行post方式的同步请求
postSyncRequest();break;
}
}/*** 输出内容到TextView
*@paramrequest*/
public void showRequest(finalString request) {
runOnUiThread(newRunnable() {
@Overridepublic voidrun() {
tv.setText(request);
}
});
}/*** 发送异步GET请求*/
private voidgetAsyncRequest() {//建立OkHttpClient对象
OkHttpClient okhttpClient = newOkHttpClient();//建立Request对象
Request request = newRequest.Builder()
.url("https://www.haha.mx/joke/2730898")//请求的地址,根据需求带参
.build();//建立call对象
Call call =okhttpClient.newCall(request);
call.enqueue(newCallback() {/*** 请求失败后执行
*@paramcall
*@parame*/@Overridepublic voidonFailure(Call call, IOException e) {
Toast.makeText(MainActivity.this,"异步get方式请求数据失败!",Toast.LENGTH_LONG).show();
}/*** 请求成功后执行
*@paramcall
*@paramresponse
*@throwsIOException*/@Overridepublic void onResponse(Call call, Response response) throwsIOException {final String res =response.body().string();
runOnUiThread(newRunnable() {
@Overridepublic voidrun() {
Toast.makeText(MainActivity.this,"异步get方式请求数据成功!",Toast.LENGTH_LONG).show();
showRequest(res);
}
});
}
});
}/*** 发送同步的get请求*/
public voidgetSyncRequest() {new Thread(newRunnable() {
@Overridepublic voidrun() {
OkHttpClient okHttpClient= newOkHttpClient();
Request request= newRequest.Builder()
.url("http://hibernate.org/orm/releases/5.3/")
.build();try{
Response response=okHttpClient.newCall(request).execute();
String responseResult=response.body().string();
showRequest(responseResult);
}catch(IOException e) {
e.printStackTrace();
}
}
}).start();
}/*** 发送异步post()请求*/
private voidpostAsynsRequest() {
OkHttpClient okhttpClient= newOkHttpClient();
FormBody.Builder formBody= new FormBody.Builder();//建立表单请求体
formBody.add("usernam", "Thanlon");
formBody.add("password", "123");
Request request= newRequest.Builder()
.url("https://www.baidu.com")
.post(formBody.build())
.build();
Call call2=okhttpClient.newCall(request);
call2.enqueue(newCallback() {
@Overridepublic voidonFailure(Call call, IOException e) {
Toast.makeText(MainActivity.this,"异步post请求数据失败!",Toast.LENGTH_LONG).show();
}
@Overridepublic void onResponse(Call call, Response response) throwsIOException {final String res =response.body().string();
runOnUiThread(newRunnable() {
@Overridepublic voidrun() {
Toast.makeText(MainActivity.this,"post异步请求数据成功!",Toast.LENGTH_LONG).show();
showRequest(res);
}
});
}
});
}/*** 发送同步的post请求*/
public voidpostSyncRequest() {new Thread(newRunnable() {
@Overridepublic voidrun() {
OkHttpClient okHttpClient= newOkHttpClient();
FormBody.Builder formBody= newFormBody.Builder();
formBody.add("username", "Thanlon");
formBody.add("password", "123");
Request request= newRequest.Builder()
.url("https://www.douban.com")
.post(formBody.build())
.build();try{
Response response=okHttpClient.newCall(request).execute();
String responseResult=response.body().string();
showRequest(responseResult);
}catch(IOException e) {
e.printStackTrace();
}
}
}).start();
}
}