package com.zjw.mynetwork3; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.IOException; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; //9.2.2 p319 使用OkHttp //OkHttp的项目主页:https://github.com/square/okhttp //将前面HttpURLConnection的使用的布局拷贝一份过来(笔记(7)) /* OkHttp使用过程GET版 1.添加依赖、上网权限 compile 'com.squareup.okhttp3:okhttp:3.8.1' <uses-permission android:name="android.permission.INTERNET"/> 会自动下载两个库:OkHttp、Okio,后者是前者的通信基础 2.创建一个OkHttpClient实例 OkHttpClient client=new OkHttpClient(); 3.创建一个空的Request对象 Request request=new Request.Builder().build(); 4.在build()方法前连缀上方法,丰富这个Request对象 Request request=new Request.Builder() .url("https://www.baidu.com")//设置目标网络地址 .build();//创建一个Request对象 5.调用OkHttpClient的newCall()方法来创建一个Call对象,调用Call对象的execute()方法发送请求获取服务器返回对象 Response response = client.newCall(request).execute(); 6.获取返回数据 String responseData=response.body().string(); */ /* OkHttp使用过程POST版 1.添加依赖、上网权限 compile 'com.squareup.okhttp3:okhttp:3.8.1' <uses-permission android:name="android.permission.INTERNET"/> 会自动下载两个库:OkHttp、Okio,后者是前者的通信基础 2.创建一个OkHttpClient实例 OkHttpClient client=new OkHttpClient(); 3.构建出一个RequestBody对象来存放待提交的参数 RequestBody requestBody=new FormBody.Builder() .add("username","admin") .add("password","123456") .build(); 4.创建一个空的Request对象 Request request=new Request.Builder().build(); 5.在build()方法前连缀上方法,丰富这个Request对象,要调用post()方法,并将RequestBody对象传入 Request request=new Request.Builder() .url("https://www.baidu.com")//设置目标网络地址 .post(requestBody) .build();//创建一个Request对象 6.调用OkHttpClient的newCall()方法来创建一个Call对象,调用Call对象的execute()方法发送请求获取服务器返回对象 Response response = client.newCall(request).execute(); 7.获取返回数据 String responseData=response.body().string(); */ public class UseOfOkHttp extends AppCompatActivity { private Button mBtnSendRequest; private TextView mTvResponseText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_use_of_ok_http); //找到控件 mBtnSendRequest = (Button) findViewById(R.id.btn_send_request); mTvResponseText = (TextView) findViewById(R.id.tv_response_text); //Button点击事件,发送HTTP请求 mBtnSendRequest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //用OkHttp发送HTTP请求 sendRequestWithOkHttp(); } }); } private void sendRequestWithOkHttp() { //开启新线程做耗时操作 new Thread(new Runnable() { @Override public void run() { try { OkHttpClient client = new OkHttpClient();//创建一个OkHttpClient实例 Request request = new Request.Builder() .url("https://www.baidu.com")//设置目标网络地址 .build();//创建一个Request对象 Response response = client.newCall(request).execute();//发送请求获取服务器返回对象 String responseData=response.body().string(); showResponse(responseData); } catch (IOException e) { e.printStackTrace(); } } }).start(); } //将数据设置给TextView private void showResponse(final String s) { //在UI线程(主线程)更新UI,因为Android不允许在子线程中进行UI操作 runOnUiThread(new Runnable() { @Override public void run() { mTvResponseText.setText(s); } }); } }
转载于:https://my.oschina.net/u/3620480/blog/1488480