目录
准备工作
一、创建HttpUtil类
二、调用使用
一个应用程序可能多次使用到网络功能,这样就会大量代码重复,通常情况下我们应该将这些通用的网络操作封装到一个类里,并提供一个静态方法,想要发送网络请求的时候,只需简单地调用这个方法即可。
下面使用OkHttp方法。
准备工作
首先在依赖库中添加以下:
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
一、创建HttpUtil类
sendOkHttpRequest()方法中有一个okHttp3.Callback参数,这是OkHttp库中自带的一个回调接口,最终结果会回调到okhttp3.Callback中。
创建一个名字为HttpUtil的类,代码如下:
public class HttpUtil {public static void sendOkHttpRequest(final String address, final okhttp3.Callback callback) {OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(address).build();client.newCall(request).enqueue(callback);}
}
二、调用使用
修改activity_main.xml代码,如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent" ><Buttonandroid:id="@+id/send_request"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Send Request" /><ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent" ><TextViewandroid:id="@+id/response_text"android:layout_width="match_parent"android:layout_height="wrap_content" /></ScrollView></LinearLayout>
修改MainActivity代码,如下:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {TextView responseText;@Overrideprotected 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);}@Overridepublic void onClick(View v) {if (v.getId() == R.id.send_request) {sendRequestWithOkHttp();}}private void sendRequestWithOkHttp() {HttpUtil.sendOkHttpRequest("http://www.baidu.com", new okhttp3.Callback(){@Overridepublic void onFailure(Call call, IOException e) {
// 这里对异常处理}@Overridepublic void onResponse(Call call, Response response) throws IOException {
// 这里得到服务器返回的具体内容String responseData = response.body().string();showResponse(responseData);}});}private void showResponse(final String response) {runOnUiThread(new Runnable() {@Overridepublic void run() {// 在这里进行UI操作,将结果显示到界面上responseText.setText(response);}});}
}
最后不要忘记申请权限:
修改AndroidManifest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.example.hotnews"><uses-permission android:name="android.permission.INTERNET" />................
效果如下: