public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity";
private static final int RESPONSE_FLAG = 0x123;
private TextView txtShow;
private Button btnGet;
private Button btnPost;
private Button btnSync;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case RESPONSE_FLAG:
String str = (String) msg.obj;
txtShow.setText(str);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setListener();
Log.i(TAG, "主线程id: " + Thread.currentThread().getId() + " name:" +
Thread.currentThread().getName());
}
/**
* 设置监听事件
*/
private void setListener() {
btnGet.setOnClickListener(this);
btnPost.setOnClickListener(this);
btnSync.setOnClickListener(this);
}
/**
* 初始化视图控件
*/
private void initView() {
txtShow = (TextView) findViewById(R.id.txt_show);
btnGet = (Button) findViewById(R.id.btn_okhttp_get);
btnPost = (Button) findViewById(R.id.btn_okhttp_post);
btnSync = (Button) findViewById(R.id.btn_okhttp_sync);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
// Get请求
case R.id.btn_okhttp_get:
// 1.OKHttpClient对象
// OkHttpClient client = new OkHttpClient();
OkHttpClient client = new OkHttpClient.Builder().build();
// 2.Request对象
final Request request = new Request.Builder()
// 默认就是get方式
.get()
.url("http://www.wuxirui.com/")
.build();
// 3.Call对象
Call call = client.newCall(request);
// 4.进行网络请求
call.enqueue(new Callback() {
// 请求失败时候的回调
@Override
public void onFailure(Call call, IOException e) {
Log.e(TAG, "onFailure: " + e.getMessage());
}
// 请求成功时候的回调
@Override
public void onResponse(Call call, Response response) throws IOException {
// Log.i(TAG, "onResponse: " + response.body().string());
// response.body().string()本质上是读流的操作
final String text = response.body().string();
Log.i(TAG, "onResponse: " + text);
Log.i(TAG, "okhttp 线程id: " + Thread.currentThread().getId() + " name:" +
Thread.currentThread().getName());
// OKHttp获取到数据之后是回调在子线程
// txtShow.setText(text);
runOnUiThread(new Runnable() {
@Override
public void run() {
txtShow.setText(text);
}
});
}
});
txtShow.setText("先走这句");
break;
// Post请求
case R.id.btn_okhttp_post:
// 1.OkHttpClient对象
OkHttpClient client2 = new OkHttpClient();
// 2.提供post请求需要的body对象
FormBody body = new FormBody.Builder()
.add("mobile", "15910907758")
.add("password", "123456")
.build();
// 3.Request对象
Request request2 = new Request.Builder()
.post(body)
.url("http://120.27.23.105/user/login")
.build();
// 4. Call对象
Call call2 = client2.newCall(request2);
// 5.进行网络请求,enqueue方法,是异步请求
call2.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e(TAG, "onFailure: " + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i(TAG, "onResponse: " + response.body().string());
}
});
break;
case R.id.btn_okhttp_sync:
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient client3 = new OkHttpClient();
Request request3 = new Request.Builder()
.get()
.url("http://www.wuxirui.com/")
.build();
Call call3 = client3.newCall(request3);
try {
// 默认是在当前线程执行的网络请求
Response response = call3.execute();
String text = response.body().string();
Log.i(TAG, "同步: " + text);
Message msg = handler.obtainMessage();
msg.what = RESPONSE_FLAG;
msg.obj = text;
msg.sendToTarget();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
break;
}
}
}
private static final String TAG = "MainActivity";
private static final int RESPONSE_FLAG = 0x123;
private TextView txtShow;
private Button btnGet;
private Button btnPost;
private Button btnSync;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case RESPONSE_FLAG:
String str = (String) msg.obj;
txtShow.setText(str);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setListener();
Log.i(TAG, "主线程id: " + Thread.currentThread().getId() + " name:" +
Thread.currentThread().getName());
}
/**
* 设置监听事件
*/
private void setListener() {
btnGet.setOnClickListener(this);
btnPost.setOnClickListener(this);
btnSync.setOnClickListener(this);
}
/**
* 初始化视图控件
*/
private void initView() {
txtShow = (TextView) findViewById(R.id.txt_show);
btnGet = (Button) findViewById(R.id.btn_okhttp_get);
btnPost = (Button) findViewById(R.id.btn_okhttp_post);
btnSync = (Button) findViewById(R.id.btn_okhttp_sync);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
// Get请求
case R.id.btn_okhttp_get:
// 1.OKHttpClient对象
// OkHttpClient client = new OkHttpClient();
OkHttpClient client = new OkHttpClient.Builder().build();
// 2.Request对象
final Request request = new Request.Builder()
// 默认就是get方式
.get()
.url("http://www.wuxirui.com/")
.build();
// 3.Call对象
Call call = client.newCall(request);
// 4.进行网络请求
call.enqueue(new Callback() {
// 请求失败时候的回调
@Override
public void onFailure(Call call, IOException e) {
Log.e(TAG, "onFailure: " + e.getMessage());
}
// 请求成功时候的回调
@Override
public void onResponse(Call call, Response response) throws IOException {
// Log.i(TAG, "onResponse: " + response.body().string());
// response.body().string()本质上是读流的操作
final String text = response.body().string();
Log.i(TAG, "onResponse: " + text);
Log.i(TAG, "okhttp 线程id: " + Thread.currentThread().getId() + " name:" +
Thread.currentThread().getName());
// OKHttp获取到数据之后是回调在子线程
// txtShow.setText(text);
runOnUiThread(new Runnable() {
@Override
public void run() {
txtShow.setText(text);
}
});
}
});
txtShow.setText("先走这句");
break;
// Post请求
case R.id.btn_okhttp_post:
// 1.OkHttpClient对象
OkHttpClient client2 = new OkHttpClient();
// 2.提供post请求需要的body对象
FormBody body = new FormBody.Builder()
.add("mobile", "15910907758")
.add("password", "123456")
.build();
// 3.Request对象
Request request2 = new Request.Builder()
.post(body)
.url("http://120.27.23.105/user/login")
.build();
// 4. Call对象
Call call2 = client2.newCall(request2);
// 5.进行网络请求,enqueue方法,是异步请求
call2.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e(TAG, "onFailure: " + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i(TAG, "onResponse: " + response.body().string());
}
});
break;
case R.id.btn_okhttp_sync:
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient client3 = new OkHttpClient();
Request request3 = new Request.Builder()
.get()
.url("http://www.wuxirui.com/")
.build();
Call call3 = client3.newCall(request3);
try {
// 默认是在当前线程执行的网络请求
Response response = call3.execute();
String text = response.body().string();
Log.i(TAG, "同步: " + text);
Message msg = handler.obtainMessage();
msg.what = RESPONSE_FLAG;
msg.obj = text;
msg.sendToTarget();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
break;
}
}
}
//配置
compile 'com.squareup.okhttp3:okhttp:3.9.0'
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'