Android网络框架之OkHttp是一个处理网络请求的开源项目,是Android端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso)用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0 里已移除HttpClient)。
OkHttp不仅在接口封装上画面做的简单易用,就连在底层实现上也是自成一派,比起原生的HttpURLConnection可以说是有过之而无不及,现在已经成了广大Android开发者首选的网络通信库。
- 注意:在使用OkHttp之前,我们需要先在项目中导入OkHttp相关的jar包作为依赖项。
① 首先在下载OkHttp的jar包(jar包下载地址)或直接在GitHub上下载OkHttp的jar包(jar包下载地址),接着在AndroidStudio里打开Project—>app—>libs,导入OkHttp的相关的jar包;
②在libs里点击okhttp-3.9.0.jar包后点击“Add As Library…”引入依赖项。
或直接手动添加依赖项,打开Project—>app—>build.gradle,在build.gradle里的dependencies {……}添加相关jar包的依赖项:
compile files(‘libs/okhttp-3.9.0.jar’)
- layout/activity_main.xml界面布局代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/send_request"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送请求" />
<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.java逻辑代码如下:
package com.fukaimei.okhttptest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView responseText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button sendRequest = (Button) findViewById(R.id.send_request);
responseText = (TextView) findViewById(R.id.response_text);
sendRequest.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.send_request) {
sendRequestWithOkHttp();
}
}
private void sendRequestWithOkHttp() {
new Thread(new Runnable() {
@Override
public void run() {
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://www.mi.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 response) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// 在这里进行UI操作,将结果显示到界面上
responseText.setText(response);
}
});
}
}
上面的程序Demo添加了一个sendRequestWithOkHttp()方法,并在“发送请求”按钮的点击事件里去调用这个方法。在这个方法同样还是开启了一个子线程,然后在子线程里使用OkHttp发出一条HTTP请求,最后调用了showResponse()方法来将服务器返回的数据显示到界面上。
- 注意:由于该程序需要访问互联网,因此还需要在清单文件AndroidManifest.xml文件中授权访问互联网的权限:
<!-- 授权访问互联网-->
<uses-permission android:name="android.permission.INTERNET" />