【Android入门到项目实战-- 8.5】—— 使用HTTP协议访问网络的实践用法

目录

准备工作

 一、创建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" >

    <Button
        android:id="@+id/send_request"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Send Request" />

    <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 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() {
        HttpUtil.sendOkHttpRequest("http://www.baidu.com", new okhttp3.Callback(){

            @Override
            public void onFailure(Call call, IOException e) {
//                这里对异常处理
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
//                这里得到服务器返回的具体内容
                String responseData = response.body().string();
                showResponse(responseData);
            }
        });
    }

    private void showResponse(final String response) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 在这里进行UI操作,将结果显示到界面上
                responseText.setText(response);
            }
        });
    }
}

效果如下:

猜你喜欢

转载自blog.csdn.net/Tir_zhang/article/details/130470351
8.5