使用网络通信库我们不仅限于使用原生的HttpURLConnection,除了这个还有其他的也是非常好用的,就比如说OkHttp,使用过之后感觉比原生的HttpURLConnection还要简单易用,下面我们就来学习一下。
要使用OkHttp首先要导入依赖,要导入依赖我们要先去OkHttp的项目主页地址看一下他现在的版本号,和一些要注意的事项。
项目主页地址:https://github.com/square/okhttp
需要注意的就是下面的这个,OkHttp需要运行在Android5.0和Java 8+上。

添加完依赖,会自动下载两个库,一个是OkHttp库,另一个是Okio库。后者是前者的通信基础。
然后下面是具体使用方法:
- 首先要创建一个OkHttpClient的实例。
- 发起HTTP请求,需要创建一个Request对象,然后在这个对象中添加你想要添加的比如目标地址等。
- 然后调用OkHttpClient的newCall()方法来创建一个对象,并调用它的execute()方法来发送请求并获取服务器返回的数据。
基本就是这些,感觉要比HttpURLConnection简单好多。
下面我们来看一下运行结果:


可以看出,这种方法和用HttpURLConnection的方法运行效果是一样的。但是使用起来比较简单。
先添加网络访问权限:
<uses-permission android:name="android.permission.INTERNET"/>
然后修改app/build.gradle文件,在dependencies闭包中添加:
implementation("com.squareup.okhttp3:okhttp:3.14.0")
下面我们来看一下代码:
activity_main.xml代码如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/send_request"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/but_1"/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/response_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
</LinearLayout>
布局代码并没有改变。
MainActivity中的代码如下:
public class MainActivity extends AppCompatActivity {
TextView responseText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.send_request);
responseText = findViewById(R.id.response_text);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendRequestWithOkHttp();
}
});
}
private void sendRequestWithOkHttp() {
new Thread(new Runnable() {
@Override
public void run() {
try{
OkHttpClient client = new OkHttpClient(); //创建OkHClient实例
Request request = new Request.Builder() //发请求创建一个Request对象
.url("http:www.baidu.com")
.build();
Response response = client.newCall(request).execute(); //发请求获取服务器返回的数据
String responseData = response.body().string();
showResponse(responseData);
} catch (Exception e){
e.printStackTrace();
}
}
}).start();
}
private void showResponse(final String responseData) {
runOnUiThread(new Runnable() {
@Override
public void run() { //开线程显示数据
responseText.setText(responseData);
}
});
}
}
这样就完成了。
下面我们总结一下OkHttp获取请求和提交请求的使用方法:
OkHttp中GET请求的使用:
public void getRequest(Context context, String requestUrl) {
mContext = context;
try {
//得到OkHttpClient对象
OkHttpClient mOkHttpClient = new OkHttpClient();
//构造Request对象
Request.Builder builder = new Request.Builder();
Request request = builder.get().url(requestUrl).build();
//将Request封装为Call
Call mCall = mOkHttpClient.newCall(request);
//开始执行Call
//Response mResponse= mCall.execute();//同步方法
mCall.enqueue(new Callback() {//异步执行方法
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
int code = response.code();//响应码
String result = response.body().string();
Message message = new Message();
message.what = MSG_GETSTATE;
message.obj = code;
mHandler.sendMessage(message);
}
});
} catch (Exception e) {
}
}
OKHttp的POST请求的使用:
public void postRequest(String requestUrl, JSONObject mJsonObject) {
try {
//初始化OkHttpClient
OkHttpClient mOkHttpClient = new OkHttpClient();
//构造Json的请求对象
RequestBody mRequestBody = RequestBody.create(MediaType.parse("text/plain;chaset=utf-8"), mJsonObject.toString());
//构造Request对象
Request.Builder mBuilder=new Request.Builder();
Request request=mBuilder.post(mRequestBody).url(requestUrl).build();
//构造Call对象
Call mCall=mOkHttpClient.newCall(request);
mCall.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
} catch (Exception e) {
}
}
使用OkHttp的GET和POST都可以按照上边的用法套。
本文介绍了如何使用OkHttp进行网络通信,相较于HttpURLConnection,OkHttp更简单易用。首先需要在项目中导入OkHttp和Okio的依赖,然后创建OkHttpClient实例,接着创建Request对象并指定目标地址,通过OkHttpClient调用execute()发送请求并获取数据。示例代码展示了GET和POST请求的使用方法,简化了网络访问的过程。

1437

被折叠的 条评论
为什么被折叠?



