第一步,需要创建一个OkHttpClient的实例,如下所示:
OkHttpClient client = new OkHttpClient(); // 创建一个实例
第二步,如果你想要发起一条HTTP请求,就需要创建一个Request对象:
//发起一条HTTP请求
Request request = new Request.Builder().build();
当然,上述代码只是创建了一个空的Request对象,并没有什么实际的作用。我们可以在最终的build()方法之前连缀很多其他方法来丰富这个Request对象。比如,可以通过url()方法来设置目标的网络地址,如下:
Request request = new Request.Builder()
.url("http://www.baidu.com")
.build();
第三步,调用OkHttpClient的newCall()方法来创建一个call对象,并调用它的execute()方法来发送请求并获取服务器返回的数据:
Response response = client.newCall(request).execute();
其中,Response对象就是服务器返回的数据了,我们可以使用如下写法来得到返回的具体内容:
String responseData = response.body().string();
如果是发起一条POST,我们需要先构建出一个Request Body对象来存放待提交的 参数,如下所示:
RequestBody requestBody = new FormBody.Builder()
.add("username","admin")
.add("password","123456")
.build();
然后在Request.Builder中调用一下post()方法,并将RequestBody对象传入:
Request request = new Request.Builder()
.url("http://baidu.com")
.post(requestBody)
.build();
接下来的操作就跟GET请求一样了,调用execute()方法来发送请求并获取服务器返回的数据即可。
接下来用一个完整的实例来演示上面的做法:
package com.example.webviewapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private Button send,upload;
private TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
send = findViewById(R.id.send_request);
txt = findViewById(R.id.response_txt);
upload = findViewById(R.id.upload);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendRequestWithOkHttp();
}
});
}
private void sendRequestWithOkHttp() {
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://www.baidu.com")
.build();
try {
Response response = client.newCall(request).execute();
String responseData = response.body().string();
showRequest(responseData);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private void showRequest(final String responseData) {
runOnUiThread(new Runnable() {
@Override
public void run() {
txt.setText(responseData);
}
});
}
}
这里很重要的知识点:
网络请求一定要用new Thread()开线程
在UI界面上显示,一定要用runOnUiThread()