当前位置: 首页 > article >正文

【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);
            }
        });
    }
}

最后不要忘记申请权限:

修改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" />

................

效果如下:


http://www.kler.cn/a/17707.html

相关文章:

  • 关于GCC内联汇编(也可以叫内嵌汇编)的简单学习
  • 【MySQL 保姆级教学】事务的隔离级别(详细)--下(13)
  • UDP协议和TCP协议之间有什么具体区别?
  • 【mysql】使用宝塔面板在云服务器上安装MySQL数据库并实现远程连接
  • 【软件工程】一篇入门UML建模图(类图)
  • Appium配置2024.11.12
  • 命令设计模式
  • python基本数据类型---数字字符串
  • 有关教育的几段话
  • 基于zookeeper实现分布式锁
  • 【无人车】无人驾驶地面车辆避障研究(Matlab代码实现)
  • 特征向量中心度(Eigenvector Centrality)
  • Kali 安装中文输入法(超详细)
  • 中级软件设计师备考---软件工程1
  • git上传大大大文件项目好折磨人
  • k8s之审计日志
  • 微机作业题
  • 字节跳动测试岗面试挂在2面,复盘后,我总结了失败原因,决定再战一次...
  • (别再手动点APP了)UiAutomator2自动化测试框架带你玩转APP操作
  • 模拟银行账户转账业务
  • 【软件测试】测试分类
  • 《花雕学AI》28:革命性的 ChatGPT for SEO——让您的排名飙升 50%!
  • 人脸识别--传统+深度方法
  • 【GAMES101】04 Viewing Transformation
  • LVS+Keepalived 高可用群集部署
  • 如何发起一次完整的HTTP的请求流程