main布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.dash.a02_okhttp3.MainActivity">
<Button
android:onClick="getTongBu"
android:text="get同步"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:onClick="getYiBu"
android:text="get异步"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:onClick="postYiBu"
android:text="post异步"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:onClick="gilde"
android:text="图片"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/image_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
MainActivity
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.google.gson.Gson;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.image_view);
}
/**
* get的同步请求
* @param view
*/
public void getTongBu(View view) {
//匿名内部类.....继承 多态(父类的引用指向子类对象)
new Thread(){
@Override
public void run() {
//1.创建一个客户端对象
OkHttpClient okHttpClient = new OkHttpClient();
//2.通过构建器来创建一个request对象....制定了请求的路径
Request request = new Request.Builder()
.url("https://www.zhaoapi.cn/ad/getAd")
//.method()//可以指定请求的方式,,,默认是get方式
.build();
//3.客户端执行一个新的请求....此时还没有去执行
Call call = okHttpClient.newCall(request);
//4.指定请求的方式,,,,excute表示的是同步方式,,,返回值是一个响应的对象
try {
Response response = call.execute();
if (response.isSuccessful()){//判断响应是否成功
String json = response.body().string();
Log.e("json", "run: "+json );
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
public void getYiBu(View view) {
//1.创建一个客户端对象
OkHttpClient okHttpClient = new OkHttpClient();
//2.通过构建器来创建一个request对象....制定了请求的路径
Request request = new Request.Builder()
.url("https://www.zhaoapi.cn/ad/getAd")
//.method()//可以指定请求的方式,,,默认是get方式
.build();
//3.客户端执行一个新的请求....此时还没有去执行
Call call = okHttpClient.newCall(request);
//4.异步执行
call.enqueue(new Callback() {
//请求失败
@Override
public void onFailure(Call call, IOException e) {
}
//请求得到了响应
@Override
public void onResponse(Call call, final Response response) throws IOException {
if (response.isSuccessful()){
//拿到响应的内容....response.body().string()必须执行在子线程中
//响应体的 string() 方法对于小文档来说十分方便、高效。但是如果响应体太大(超过1MB)
// ,应避免适应 string()方法 ,因为他会将把整个文档加载到内存中。
//对于超过1MB的响应body,应使用流的方式来处理body......response.body().byteStream()
//response.body().string()...同一次请求只能执行一次这个方法,不可以多次调用,否则第二次返回就是null
String json = response.body().string();
//一般就需要进行解析 然后展示到页面上...更新页面是不能够在子线程的...可以使用handler
runOnUiThread(new Runnable() {//运行在主线程....这个方法是activity的方法
@Override
public void run() {
Toast.makeText(MainActivity.this,"请求成功:",Toast.LENGTH_SHORT).show();
}
});
}
}
});
}
public void postYiBu(View view) {
OkHttpClient okHttpClient = new OkHttpClient();
//post方式的参数应该放在请求的实体内容中
FormBody formBody = new FormBody.Builder()//创建的是表单的请求实体对象
.add("mobile", "15715317583")
.add("password", "123456")
.build();
//创建request对象
Request request = new Request.Builder()
.url("https://www.zhaoapi.cn/user/login")//post方式的路径
.post(formBody)//post方式传递请求的参数对象
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
String json = response.body().string();
//解析
final HomeBean homeBean = new Gson().fromJson(json, HomeBean.class);
//展示的时候需要运行在主线程
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,homeBean.getMsg(),Toast.LENGTH_SHORT).show();
}
});
}
}
});
}
public void gilde(View view) {
Glide.with(MainActivity.this).load("http://img5.imgtn.bdimg.com/it/u=49366202,632101467&fm=27&gp=0.jpg").into(imageView);
}
}